【问题标题】:Have histograms created by R for-loop with ggplot in one picture在一张图片中使用带有 ggplot 的 R for-loop 创建直方图
【发布时间】:2014-02-02 22:37:01
【问题描述】:

我正在通过 R 中的 for 循环绘制八个直方图,我想将它们全部绘制为一张图片(2 列乘 4 行)。我试图和这个人 (Multiple histograms in ggplot2) 做同样的事情,但不知何故对我来说它不起作用。

这是(部分)我的代码:

Words = levels(study$Word)
numberOfWords = length(levels(study$Word))

layout(matrix(1:8,4,2,byrow=TRUE))
par(mar=c(2,1,2,1))

for (i in 1:numberOfWords) {
word <- Words[i]
histo <- ggplot(study[study$Word==word,], aes(study$VOT[study$Word==word]))
histo + geom_histogram(aes(y = ..density..), fill = "white", colour = "black", binwidth = ((max(study$VOT[study$Word==word])-min(study$VOT[study$Word==word]))/10)) + labs(x = "VOT (ms)", y = "Density", title = word) + stat_function(fun = dnorm, args = list(mean = mean(study$VOT[study$Word==word], na.rm=T), sd = sd(study$VOT[study$Word==word], na.rm = T)), colour = "blue",  size = 1)
}

我知道 for 循环工作正常,因为当我将 print() 放在以 histo + ... 开头的最后一条很长的行周围时,我看到它连续打印我的八个直方图,相互覆盖。当我不写print()(如上面的代码)时,什么都不会打印。

我的问题很简单:如何阻止直方图相互覆盖,并将它们放在一张图片中?

【问题讨论】:

    标签: r for-loop draw histogram


    【解决方案1】:

    facet_wrap代替for循环怎么样?

    set.seed(1)
    
    study <- mtcars
    study$Word <- sample(1:8, nrow(study), replace = TRUE)
    study$VOT <- study$mpg
    p <- ggplot(study, aes(x = VOT, y = ..density..)) + geom_histogram()
    p <- p + facet_wrap(~ Word, nrow = 4, ncol = 2)
    

    【讨论】:

    • 谢谢你,Jake,这确实是我想要创建的那种图像,但恐怕我对 R 的了解(还)仍然太有限,无法应用您向我自己的代码建议的功能。我查看了 facet_wrap 的文档,但仍然不太了解它是如何工作的。还有什么建议/建议吗?
    • 在 Jake 的示例中,它基本上通过某个变量 Word 来拆分您的数据,该变量的值为 1:8,因此您得到 8 个图,每个图代表 1,2,...,8。
    • @Johanna 我对示例进行了一些更改,以便更清楚地了解如何使用数据获取此信息。更改每个直方图的 binwidths 并添加 stat_function 部分更难
    • 谢谢两位。当我尝试您的代码时,它不起作用。 study &lt;- mtcarsstudy$mpg 有什么用,因为我没有任何名为 mtcarsmpg 的变量?为什么studystudy$VOT 无论如何都需要重新定义?非常感谢,感谢您的帮助。
    • @Johanna mtcars 是一个样本数据集。由于您没有提供您的数据,我使用了 R 附带的数据。您可以忽略p &lt;- ggplot(... 之前的任何内容。对困惑感到抱歉。如果您想提供数据集的样本,可以将dput(heat(study)) 的输出添加到问题中,我将更改答案以使用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2020-09-29
    相关资源
    最近更新 更多