【问题标题】:In R how to plot the tail area of a normal distribution using ggplot?在R中如何使用ggplot绘制正态分布的尾部区域?
【发布时间】:2020-02-29 06:00:56
【问题描述】:

我找到了一种“破解”ggplot 的方法,方法是结合两个 geom_area 图来创建带有尾部区域的正态分布:

library(ggplot2)
mean <-  0
standard_deviation <- 1
Zscore <- -1.35

observation = (Zscore*standard_deviation) + mean
(tail_area <- round(pnorm(observation),2))

ggplot(NULL, aes(c(-5,5))) +
    geom_area(stat = "function", fun = dnorm, fill="sky blue", xlim = c(-5, -1.35)) +
    geom_area(stat = "function", fun = dnorm,  xlim = c(-1.35, 5))

是否有使用 ggplot 来创建正态分布并像上面那样突出显示尾部区域的“不那么老套”的方法?

【问题讨论】:

标签: r ggplot2 data-science normal-distribution


【解决方案1】:

首先,我喜欢你的方法;不确定这是否不那么“hackey”,但这是使用gghighlight的另一个选项

# Generate data (see comment below)
library(dplyr)
df <- data.frame(x = seq(-5, 5, length.out = 100)) %>% mutate(y = dnorm(x))

# (gg)plot and (gg)highlight
library(ggplot2)
library(gghighlight)
ggplot(df, aes(x, y)) + geom_area(fill = "sky blue") + gghighlight(x < -1.35)

据我了解,gghighlight 需要一个 data 参数,因此它不能单独使用 geom_area(意思是:没有 data 但使用 stat = "function")或使用 stat_function。这就是为什么我首先生成数据df


更新

回应您关于如何“突出显示 1 和 -1 之间的区域”的评论;您可以执行以下操作

ggplot(df, aes(x, y)) + geom_area(fill = "sky blue") + gghighlight(abs(x) < 1)

更新 2

要突出显示区域1.5 &lt; x &lt; 2.5,只需使用条件语句x &gt; 1.5 &amp; x &lt; 2.5

ggplot(df, aes(x, y)) + geom_area(fill = "sky blue") + gghighlight(x > 1.5 & x < 2.5)


为了抢占潜在的后续问题:此方法仅适用于连续区域。意思是,我还没有找到在单个 gghighlight 语句中突出显示 x &lt; -2.5 &amp; x &gt; 2.5 的方法。

【讨论】:

  • 这太棒了!我如何告诉 gghighlight 只突出显示 1 到 -1 之间的区域?
  • 我发现我必须制作多个 geom_area 和 gghighlight 才能获得两分。
  • @MilesMorales 我对我的帖子进行了编辑,请看一下。要在 1 和 -1 之间突出显示,只需使用条件 abs(x) &lt; 1
  • 所以你对一个区域使用了 1 个条件语句 - 但我很感兴趣如何在一个条件语句中遮蔽你不能做的两个地方的区域,比如 1.5 ,这是我遇到的问题。
  • @MilesMorales 我很困惑。您在之前的评论中询问了如何“突出显示 1 到 -1 之间的区域”。这就是我要展示的内容。
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 2018-10-12
  • 2013-12-13
  • 2012-05-19
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多