R:按组颜色的密度图?

时间:2016-07-11 14:30:18

标签: r colors histogram

我有来自2个人群的数据。 我想在同一图形上得到两者的直方图和密度图。 一种颜色为一种颜色,另一种颜色为另一种颜色。

我试过这个(例子):

library(ggplot2)
AA <- rnorm(100000, 70,20)
BB <- rnorm(100000,120,20)

valores <- c(AA,BB)
grupo <- c(rep("AA", 100000),c(rep("BB", 100000)))
todo <- data.frame(valores, grupo)


ggplot(todo, aes(x=valores, fill=grupo, color=grupo)) +
  geom_histogram(aes(y=..density..), binwidth=3)+  geom_density(aes(color=grupo))

但我只是得到一个单行和单色的图形。 enter image description here

我想为两条密度线设置不同的颜色。如果可能的话,也可以使用直方图。

我用ggplot2完成了它,但是基础R也可以。

或者我不知道我改变了什么,现在我明白了:

ggplot(todo, aes(x=valores, fill=grupo, color=grupo)) + 
geom_histogram( position="identity", binwidth=3, alpha=0.5)+ 
geom_density(aes(color=grupo))

但没有绘制密度线。 enter image description here

甚至是奇怪的事情 enter image description here

2 个答案:

答案 0 :(得分:2)

我建议使用这个ggplot2解决方案:

ggplot(todo, aes(valores, color=grupo)) +
  geom_histogram(position="identity", binwidth=3, aes(y=..density.., fill=grupo),  alpha=0.5) +
  geom_density()

enter image description here

@skan:您的尝试很接近,但您在直方图中绘制了频率而不是密度值。

答案 1 :(得分:1)

基础R解决方案可能是:

  hist(AA, probability = T, col = rgb(1,0,0,0.5), border = rgb(1,0,0,1), 
       xlim=range(AA,BB), breaks= 50, ylim=c(0,0.025), main="AA and BB", xlab = "")
  hist(BB, probability = T, col = rgb(0,0,1,0.5), border = rgb(0,0,1,1), add=T)
  lines(density(AA))
  lines(density(BB), lty=2)

对于alpha我使用了rgb。但是有更多方法可以使用它。例如,请参阅alpha()包中的scales。我还添加了AA的断点参数,以增加与BB组相比的binwidth。

enter image description here