【问题标题】:Kernel Density Plots and Histogram overlay [duplicate]核密度图和直方图叠加
【发布时间】:2020-06-01 20:22:23
【问题描述】:

所以我找到了一种使用 ggplot2 将我的 KDE 密度函数与我的直方图叠加的方法,但是我注意到我的直方图 y 轴是正确的频率,但我想为我的密度图,我也不知道如何放大我的密度图。

我使用的代码是:

data_set <- mammals

library(ggplot2)
ggplot(data=data_set, aes(data_set$`Total Averages`))+
  geom_histogram(col='black', fill = 'white', binwidth = 0.5)+
  labs(x = 'Log10 total body mass (kg)', y = 'Frequency', title = 'Average body mass (kg) of mammalian species (male and female)')+
  geom_density(col=2)

我已经发布了指向下面图片的链接,说明我的情节是什么样的

【问题讨论】:

  • 什么是mammals?它来自一个包裹吗?如果是这样,你能准确地说是哪一个吗?如果是您自己的数据集,您能否通过以下链接提供您的数据集的可重现示例:stackoverflow.com/questions/5963269/…

标签: r ggplot2 histogram kernel-density


【解决方案1】:

您的直方图是使用countbins 的数据绘制的。要获得scaled 的密度,您可以通过传递y = ..count.. 来更改密度的表示。

如果你想表示这个密度的比例(例如缩放到最大为1),你可以在scale_y_continuous 中传递sec.axis 参数(SO 上的很多帖子都开发了这个特定的使用函数)如下:

df <- data.frame(Total_average = rnorm(100,0,2)) # Dummy example

library(ggplot2)
ggplot(df, aes(Total_average))+
  geom_histogram(col='black', fill = 'white', binwidth = 0.5)+
  labs(x = 'Log10 total body mass (kg)', y = 'Frequency', title = 'Average body mass (kg) of mammalian species (male and female)')+
  geom_density(aes(y = ..count..), col=2)+
  scale_y_continuous(sec.axis = sec_axis(~./20, name = "Scaled Density"))

你会得到:

它回答了你的问题吗?

【讨论】:

  • 非常感谢,我终于可以开始写论文了。 :)
  • 抱歉,您能解释一下为什么或如何选择 ~./20,因为我只是尝试使用 20 及其方法,有没有一种方法可以在不反复试验的情况下确定什么是最好的
  • 因为在我的示例中,左轴上的最大值是 20,所以我只需除以 20 即可得到从 0 到 1 的所有范围。在您的图表中,您的最大值似乎是 30 (但也许density 会超越),所以你必须相应地适应。
猜你喜欢
  • 2020-08-08
  • 2021-03-14
  • 2015-07-29
  • 2012-03-04
相关资源
最近更新 更多