r - 使用 ggplot2 : Code produces straight line at 0 在直方图上绘制正态曲线

标签 r ggplot2 histogram

这个论坛已经为我生成代码提供了很多帮助,我希望它返回一个特定变量的直方图,上面覆盖着它的经验正态曲线。我使用 ggplot2 和 stat_function 来编写代码。
不幸的是,该代码生成了一个具有正确直方图的图,但正态曲线是零处的直线(以下代码生成的图中的红线)。

对于这个最小的例子,我使用了 mtcars 数据集 - 使用我的原始数据集观察到了 ggplot 和 stat_function 的相同行为。

这是编写和使用的代码:

library(ggplot2)
mtcars
hist_staff <- ggplot(mtcars, aes(x = mtcars$mpg)) + 
  geom_histogram(binwidth = 2, colour = "black", aes(fill = ..count..)) +
  scale_fill_gradient("Count", low = "#DCDCDC", high = "#7C7C7C") +
  stat_function(fun = dnorm, colour = "red")
print(hist_staff)

我还尝试指定 dnorm:
stat_function(fun = dnorm(mtcars$mpg, mean = mean(mtcars$mpg), sd = sd(mtcars$mpg))

这也没有解决 - 返回一条错误消息,指出参数不是数字。

我希望你们能帮助我!非常感谢!

最好的,詹尼克

最佳答案

您的曲线和直方图在不同的 y 尺度上,您没有查看 stat_function 上的帮助页面, 否则你会把参数放在 list 中正如它在示例中清楚地显示的那样。你也没有做 aes就在您的初始 ggplot称呼。我真诚地建议点击更多的教程和书籍(或者至少是帮助页面),而不是在 SO 上零碎地学习 ggplot。

一旦你修复了 stat_function arg 问题和 ggplot``aes问题,您需要解决 y 轴比例差异。为此,您需要将直方图的 y 切换为使用底层 stat_bin 的密度。计算数据框:

library(ggplot2)

gg <- ggplot(mtcars, aes(x=mpg))
gg <- gg + geom_histogram(binwidth=2, colour="black", 
                          aes(y=..density.., fill=..count..))
gg <- gg + scale_fill_gradient("Count", low="#DCDCDC", high="#7C7C7C")
gg <- gg + stat_function(fun=dnorm,
                         color="red",
                         args=list(mean=mean(mtcars$mpg), 
                                  sd=sd(mtcars$mpg)))

gg

enter image description here

关于r - 使用 ggplot2 : Code produces straight line at 0 在直方图上绘制正态曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29182228/

相关文章:

ios - 快速从 UIImage 中找到独特的颜色?

python - 如何从 python 中的 HashMap 中创建直方图?

python - 视频中的直方图均衡

80 行 7 列的随机样本

javascript - 使用迷你图创建 R highchart 表

r - 使用 ggplot2 绘制受限三次样条曲线时出错

r - 如何测量R/ggplot2中2条分布曲线之间的面积

r - 如何在ggplot2中更改自定义图例中的线条角度

r - 如何正确为 r 代码创建 exe

r - 带弹性包装的R中的for环