【问题标题】:geom_density NOT displaying over geom_histogramgeom_density 不显示在 geom_histogram
【发布时间】:2021-05-23 11:39:29
【问题描述】:

我正在尝试使用 ggplot 在直方图上绘制密度曲线,但无济于事。 dlist 是带有数值的向量。

这是我的代码:

ggplot() +
  geom_histogram(aes(x=dlist), bins = 30, fill = "#B3E4F7") +
  geom_density() +
  geom_vline(aes(xintercept = mean(dlist)),
             color="#D2091F", linetype="dashed",size=1)

【问题讨论】:

  • 见这里:stackoverflow.com/questions/5688082/…>
  • 能否请您添加数据?

标签: r ggplot2


【解决方案1】:

您需要将y 设置为..density..。例如:

ggplot(data.frame(dlist), aes(x=dlist, y = ..density..)) +
        geom_histogram(bins = 30, fill = "#B3E4F7") +
        geom_density() +
        geom_vline(aes(xintercept = mean(dlist)),
                   color="#D2091F", linetype="dashed",size=1)

一个可重现的例子:

library(ggplot2)
ggplot(mtcars, aes(x = mpg, y = ..density..)) +
        geom_histogram(bins = 30,  fill = "#B3E4F7") +
        geom_density()

【讨论】:

  • dlist 是向量而不是数据框,因此您的代码与我的示例无关。
  • @user9532692 这只是一个可重现的示例,因为您没有提供可重现的数据(强烈推荐)。这个答案意味着你的问题应该通过在你的aes中指定y = ..density..来解决
  • @user9532692 查看更新的代码(我的答案的开头),让我知道它是否适合您。如果没有,请使用dput() 分享一些可重现的数据
【解决方案2】:

geom_desntity 没有数据。将数据放入 ggplot() 或所有函数中。

ggplot(aes(x=dlist)) +
  geom_histogram(bins = 30, fill = "#B3E4F7") +
  geom_density() +
  geom_vline(aes(xintercept = mean(dlist)),color="#D2091F", linetype="dashed",size=1)

但是,如果您想比较两者,您可能需要使用密度统计数据绘制直方图:

ggplot(aes(x=dlist)) +
  geom_histogram(aes(y = ..density..),bins = 30, fill = "#B3E4F7") +
  geom_density() +
  geom_vline(aes(xintercept = mean(dlist)),color="#D2091F", linetype="dashed",size=1)

如果你有一个数字向量dlist,你可以在ggplot之前创建一个data.frame如下:

dlist <- rnorm(1000)
tibble(dlist = dlist) %>% 
    ggplot(aes(x=dlist)) +
      geom_histogram(aes(y = ..density..),bins = 30, fill = "#B3E4F7") +
      geom_density() +
      geom_vline(aes(xintercept = mean(dlist)),
                 color="#D2091F", linetype="dashed",size=1)

【讨论】:

  • 感谢您的回复。但是,我收到以下错误:data 必须是一个数据框,或者由fortify() 强制的其他对象,而不是具有 uneval 类的 S3 对象您是否不小心将aes() 传递给了data 参数?
  • 好吧,ggplot 需要一个 data.frame。如果你有一个向量 dlist,你可以按如下方式创建一个: tibble(dlist = dlist) %>% ggplot(aes(x=dlist)) + geom_histogram(aes(y = ..density..),bins = 30, fill = "#B3E4F7") + geom_density() + geom_vline(aes(xintercept = mean(dlist)), color="#D2091F", linetype="dashed",size=1)
猜你喜欢
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多