23

我想在一页上使用直方图绘制 data.frame 的每一列。这是使用 R 附带的示例“钻石”数据集的示例:

p = list()
for (i in 1:ncol(diamonds)) p[[i]] <- qplot(diamonds[,i], xlab=names(diamonds)[[i]])
do.call(grid.arrange, p)

在此处输入图像描述

这确实绘制了所有列,但每一列的数据看起来都一样。所以,有些事情显然是错误的。

这是完成这项任务的正确方法吗?我确定我在某处有一些愚蠢的语法,将相同的列数据集分配给列表中的每个元素,但我不确定它是什么。

谢谢

4

1 回答 1

44

干得好:

library(reshape2)
library(ggplot2)
d <- melt(diamonds[,-c(2:4)])
ggplot(d,aes(x = value)) + 
    facet_wrap(~variable,scales = "free_x") + 
    geom_histogram()

在此处输入图像描述

melting 允许我们使用生成的分组变量(称为variable)将数据分成组并为每个组绘制直方图。请注意使用 ,scales = "free_x"因为每个变量都有明显不同的范围和规模。

于 2012-10-23T17:40:56.990 回答