首页 > 解决方案 > 在 ggplot 组合中绘制 gamma、normal 和 t 的 PDF

问题描述

我想绘制正态分布、伽玛和 t 分布的 pdf。我只想为每个分布生成一个随机样本。目的只是为了说明图表之间的差异。我不确定是否可以将它们结合起来。我知道如何用这段代码分别绘制曲线:

ggplot(data = data.frame(x = c(-3, 3)), aes(x)) +
  stat_function(fun = dnorm, n = 101, args = list(mean = 0, sd = 1)) + ylab("") +
  scale_y_continuous(breaks = NULL)
ggplot(data = data.frame(x = c(-10, 10)), aes(x)) +
  stat_function(fun = dt, n = 1000, args = list(df = 3)) + ylab("") +
  scale_y_continuous(breaks = NULL)

ggplot(data = data.frame(x = c(-10, 10)), aes(x)) +
  stat_function(fun = dgamma, n = 1000, args = list(shape = 3)) + ylab("") +
  scale_y_continuous(breaks = NULL)

我想将所有这些组合成一个图,例如每个图的一种颜色。这在ggplot中可能吗?感谢有人有任何意见。

编辑:我知道使用 gridextra 包和功能 grid.arrange 我可以将它们组合成图片。但我想让它们在同一个图中。我也不太明白为什么 t 分布与正态分布如此相似。我尝试过 n = 5,但它们仍然非常相似。我想说明它们之间的区别。问候

标签: rggplot2

解决方案


您无需在ggplot调用中指定数据...您可以将其添加到每个stat_function调用中。

ggplot() +
  stat_function(data = data.frame(x = c(-3, 3)), aes(x), fun = dnorm, n = 101, args = list(mean = 0, sd = 1), colour = "red") +
  stat_function(data = data.frame(x = c(-10, 10)), aes(x), fun = dt, n = 1000, args = list(df = 3), colour = "blue") +
  stat_function(data = data.frame(x = c(-10, 10)), aes(x), fun = dgamma, n = 1000, args = list(shape = 3), colour = "green") + 
  ylab("") +
  scale_y_continuous(breaks = NULL)

图形


推荐阅读