我有一个包含四列的数据框,如下所示:
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
我想制作一个直方图,将所有四列显示为不同颜色的条,所以我尝试了:
> 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)
哪个产生了:
我不喜欢条形的不透明性质,因为它们掩盖了重叠直方图的形状。我知道我可以使用找到的代码here手动策划直方图的颜色;但这似乎是一个乏味的过程,我确信必须有一个更好的方法。
相反,我尝试复制在此question
中完成的操作> 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")
但它不起作用,我不太了解ggplot命令,甚至不知道为什么。请帮忙。
答案 0 :(得分:7)
我倾向于用分面来做这件事。否则,使用您的数据集,结果是不可理解的。
library(reshape2)
library(ggplot2)
gg <- melt(wt)
ggplot(gg, aes(x=value, fill=variable)) +
geom_histogram(binwidth=10)+
facet_grid(variable~.)
编辑:对OP评论的回应。
melt(...)
将数据帧从“宽”格式(不同列中的数据)转换为“长”格式 - 一列中的所有数据,第二列区分不同类型的数据(例如,识别行中数据来自哪一列)。
如果您使用默认值melt(...)
,如上所述,它会创建一个包含两列的数据框:$value
包含实际数据,$variable
包含列的名称(在起始数据框中)此数据来自。比较wt
和gg
,我想你会明白我的意思。
所以我们在这里使用value
作为x轴,并根据variable
对数据进行分组。