如何在R中以最小的努力为数据集中的所有变量创建直方图?

时间:2012-06-27 14:01:27

标签: r ggplot2 histogram

探索新数据集:可视化许多(所有)变量的最简单,最快捷的方法是什么?

理想情况下,输出显示彼此相邻的直方图,且杂乱和最大信息最少。这个问题的关键是处理大型和不同数据集的灵活性和稳定性。我正在使用RStudio,通常会处理大量杂乱的调查数据。

Hmisc框中的一个例子,在这里效果很好:

library(ggplot2)
str(mpg)

library(Hmisc)
hist.data.frame(mpg)

不幸的是,在其他地方我遇到了数据标签的问题(plot.new()中的错误:数字边距太大)。它还崩溃了一个比mpg更大的数据集,我还没弄明白如何控制分箱。而且,我更喜欢ggplot2中的灵活解决方案。请注意,我刚开始学习R并习惯了商业软件提供的舒适解决方案。

有关此主题的更多问题:

R histogram - too many variables

...

1 个答案:

答案 0 :(得分:9)

可能有三种广泛的方法:

  1. 来自hist.data.frame()
  2. 等软件包的命令
  3. 循环变量或类似的宏构造
  4. 堆叠变量并使用构面
  5. <强>包

    其他可能有用的命令:

    library(plyr)
    library(psych)
    multi.hist(mpg) #error, not numeric
    multi.hist(mpg[,sapply(mpg, is.numeric)])
    
    来自multhist的{​​p>或plotrix,我还没有探讨过。他们俩都没有提供我想要的灵活性。

    <强>循环

    作为R初学者,每个人都建议我远离循环。所以我做了,但也许值得一试。任何建议都非常欢迎。也许你可以评论如何将图形组合成一个文件。

    <强>堆积

    我首先怀疑堆叠变量可能会失控。但是,它可能是一组合理变量的最佳策略。

    我提出的一个例子使用melt函数。

    library(reshape2)
    mpgid <- mutate(mpg, id=as.numeric(rownames(mpg)))
    mpgstack <- melt(mpgid, id="id")
    pp <- qplot(value, data=mpgstack) + facet_wrap(~variable, scales="free")
    # pp + stat_bin(geom="text", aes(label=..count.., vjust=-1))
    ggsave("mpg-histograms.pdf", pp, scale=2)
    

    (正如你所看到的那样,我试图在条形图上设置值标签以获得更多信息密度,但这并不是很好.X轴上的标签也不太理想。)

    这里没有完美的解决方案,也没有一刀切的命令。但也许我们可以更接近于轻松探索新的数据集。