动态生成多个领域的 R 点阵图
-
27-09-2019 - |
题
我想知道以下是否可能。
我有一项调查,包含 100 多个问题,全部是分类问题,收集于 4 个地点。所有问题都标记为 q1、q2 等。为简单起见,假设有 100 个。
我可以直观地比较跨地点特定问题的结果:
library (lattice);
histogram(~ q75 | location, data = survey, layout=c(1,4));
或者,使用 ggplot2,
library (ggplot2);
qplot(q75, data=survey) + facet_grid(location ~ .);
这给出了 4 个垂直对齐的直方图, 一 问题。
我想知道是否有 程序化的 生成直方图的方法 全部 100 个问题,所以最左边我有 q1 的 4 个直方图堆栈,然后右边有 q2 的 4 个直方图堆栈,依此类推。当然,这将是一条很长的线,但这仅用于目视检查以及发现初始区域以进行进一步调查。向右滚动对我来说没问题,我有一台宽屏显示器,所以我可以一次获得相当数量的直方图。
问题用“q”+计数器标记是很好的。我不知道的是
- 如何用晶格(或ggplot2?)制作这种图,它是一个二维晶格。
- 如何将此类以编程方式生成的字段名称输入到这些命令中。
欢迎提出建议。我是一名程序员,但不是 R 领域的新手。
解决方案
诀窍在于以正确的格式获取数据。您想要一个包含 3 列的数据框:问题、位置和分数。(这 reshape
包可以帮助您操作数据集。)
n_questions <- 100
n_responses <- c(North = 89, East = 37, South = 57, West = 71)
n_locations <- length(n_responses)
total_responses <- sum(n_responses)
survey <- data.frame(
question = unlist(lapply(n_responses, function(x) rep(seq_len(n_questions), each = x))),
location = rep(c("North", "East", "South", "West"), times = n_questions * n_responses),
score = sample(n_questions, n_questions * total_responses, replace = TRUE)
)
之后,绘制直方图就很容易了。
格子:
library(lattice)
library(latticeExtra)
useOuterStrips(histogram(~ score | question * location, data = survey))
ggplot2:
library(ggplot2)
ggplot(survey, aes(score)) + geom_histogram() + facet_grid(location ~ question)
不隶属于 StackOverflow