R - 如何将多个直方图一起绘制?

Sla*_*ron 2 r histogram

我有一个包含四列的数据框,如下所示:

Beef-Low    Beef-High   Cereal-Low  Cereal-High
90          73          107         98
76          102         95          74
90          118         97          56
64          104         80          111
86          81          98          95
51          107         74          88
72          100         74          82
90          87          67          77
95          117         89          86
78          111         58          92
Run Code Online (Sandbox Code Playgroud)

我想制作一个直方图,将所有四列显示为不同颜色的条形,所以我尝试了:

> hist(wt$Beef.Low, main="Weight Gain Across Four Diets", xlab="Weight Gain", col="coral", xlim=c(0,120), ylim=c(0,4))
> hist(wt$Beef.High, col="coral3", add=T)
> hist(wt$Cereal.Low, col="yellow", add=T)
> hist(wt$Cereal.High, col="yellow3", add=T)
Run Code Online (Sandbox Code Playgroud)

哪个产生:

直方图

我不喜欢条形的不透明性质,因为它们掩盖了重叠直方图的形状.我知道我可以使用这里找到的代码来手动策划直方图的颜色; 但这似乎是一个乏味的过程,我确信必须有一个更好的方法.

相反,我试图复制在这个问题中所做的事情

> bl = wt$Beef.Low
> bh = wt$Beef.High
> cl = wt$Cereal.Low
> ch = wt$Cereal.High
> wts = rbind(bl,bh,cl,ch)
> wtss = as.data.frame(wts)
> ggplot(wtss, aes("Weight", fill="Diet")) + geom_histogram(alpha=0.5, aes(y = "Frequency"), position="identity")
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我不太了解ggplot命令,甚至不知道为什么.请帮忙.

jlh*_*ard 7

我倾向于用分面来做这件事.否则,使用您的数据集,结果是不可理解的.

library(reshape2)
library(ggplot2)
gg <- melt(wt)
ggplot(gg, aes(x=value, fill=variable)) +
  geom_histogram(binwidth=10)+
  facet_grid(variable~.)
Run Code Online (Sandbox Code Playgroud)

编辑:回应OP的评论.

melt(...) 将数据帧从"宽"格式 - 不同列中的数据 - 转换为"长"格式 - 一列中的所有数据,第二列将不同类型的数据区分开(例如,识别行中数据的哪一列)来自).

如果使用melt(...)默认值,如上所述,它会创建一个$value包含两列的数据框:包含实际数据,并$variable包含此数据来自的列的名称(在起始数据框中).比较wt,gg我想你会明白我的意思.

所以这里我们value用于x轴,并基于数据分组variable.