【问题标题】:Plot the PDF of gamma, normal and t in ggplot combined在 ggplot 组合中绘制 gamma、normal 和 t 的 PDF
【发布时间】:2021-05-13 14:09:53
【问题描述】:

我想绘制正态分布、伽马分布和 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,但它们仍然非常相似。我想说明它们之间的区别。 问候

【问题讨论】:

  • 这里有很多相关的问题/答案:stackoverflow.com/…
  • 如果您找到了答案,请标记为已回答。

标签: r ggplot2


【解决方案1】:

您无需在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)

【讨论】:

    【解决方案2】:

    自己构建数据框然后将其传递给ggplot 会更容易(IMO)。

    library(tidyverse)
    xvec <- seq(-10,10,length=101)
    dd <- purrr::map_dfr(list(normal=dnorm(xvec, 0, 1),
                              t=dt(xvec,df=3),
                              gamma=dgamma(xvec,shape=3)),
         ~ tibble(x=xvec, y=.),
        .id="distribution")
    ggplot(dd, aes(x, y, colour=distribution)) + geom_line()
    

    曲线在峰值处看起来很小有点不平滑,在定义 xvec 时可能值得将 length 增加到 501 ...

    【讨论】:

    • 太棒了!谢谢
    猜你喜欢
    • 2014-11-24
    • 2014-03-17
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2011-06-15
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多