将曲线拟合到直方图 ggplot

cha*_*_23 6 r ggplot2

我知道我可以通过以下方式将密度曲线拟合到 ggplot 中的直方图。

df = data.frame(x=rnorm(100))
ggplot(df, aes(x=x, y=..density..)) + geom_histogram() + geom_density()
Run Code Online (Sandbox Code Playgroud)

直方图

但是,我希望我的 y 轴是频率(计数)而不是密度,并保留适合分布的曲线。我怎么做?

Jot*_*ota 5

根据您的目标,只需使用乘法缩放密度曲线即可实现类似的效果:

ggplot(df, aes(x=x)) + geom_histogram() + geom_density(aes(y=..density..*10))
Run Code Online (Sandbox Code Playgroud)

或者

ggplot(df, aes(x=x)) + geom_histogram() + geom_density(aes(y=..count../10))
Run Code Online (Sandbox Code Playgroud)

如果您想以不同的方式缩放事物,请选择其他值(而不是 10)。

编辑:

由于您是在全局环境中定义缩放因子,因此您可以在以下范围内定义它aes

ggplot(df, aes(x=x)) + geom_histogram() + geom_density(aes(n=n, y=..density..*n)) 
# or
ggplot(df, aes(x=x, n=n)) + geom_histogram() + geom_density(aes(y=..density..*n))
Run Code Online (Sandbox Code Playgroud)

或者使用另一种不太好的方法get

ggplot(df, aes(x=x)) + 
  geom_histogram() + 
  geom_density(aes(y=..density.. * get("n", pos = .GlobalEnv)))
Run Code Online (Sandbox Code Playgroud)