【问题标题】:R: Density plot with colors by group?R:按组显示颜色的密度图?
【发布时间】:2016-11-13 13:18:18
【问题描述】:

我有来自 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))

但我只是得到一个带有单线和单色的图形。

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

我已经用 ggplot2 完成了,但 base R 也可以。

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

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

但未绘制密度线。

甚至奇怪的事情,比如

【问题讨论】:

    标签: r colors histogram


    【解决方案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。但是还有更多方法可以获取它。例如,请参阅 scales 包中的 alpha()。与 BB 组相比,我还为 AA 的绘图添加了中断参数以增加 binwidth。

    【讨论】:

    • 如何查看带有 alpha 的直方图,就像我的第二个图一样,但也叠加了线条?
    【解决方案2】:

    我建议这个 ggplot2 解决方案:

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

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

    【讨论】:

    • 如何查看带有 alpha 的直方图,就像我的第二个图一样,但也叠加了线条?
    • 谢谢。我总是对将 aes() 参数放在 ggplot 内或其他术语内的位置感到困惑。现在,我怎样才能得到更粗的密度线?
    • 最后一件事,如果我想用 stat_function(fun = dnorm.....) 添加一个绘图以添加有关均值正态分布的信息....设法获得适当的 y 缩放?
    • @skan 你可以通过设置geom_density(size=1)来简单地改变线宽。
    • 您能否详细说明“适当缩放”的含义?
    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2014-10-12
    • 2021-10-29
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    相关资源
    最近更新 更多