如何在R中使用ggplot绘制正态分布的尾部区域?

4
我找到了一种方法来“黑客”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))

enter image description here

有没有使用ggplot创建正态分布并突出尾部区域的“非常规”方法?

请注意,这里提供了一种替代方法,但仍然是“hackey”的 https://dev59.com/Fmcs5IYBdhLWcg3w-Yz4。 - Chris
1个回答

8

首先,我喜欢你的方法;不确定这是否更少“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)

enter image description here

据我所了解,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)

enter image description here

更新 2

要突出显示区域1.5 < x < 2.5,只需使用条件语句x > 1.5 & x < 2.5

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

enter image description here


为了预防可能的后续问题:此方法仅适用于连续区域。也就是说,我还没有找到一种方法来在单个语句中突出显示x < -2.5 & x > 2.5

我发现我需要使用多个geom_area和gghighlight来得到两个点。 - Angel Cloudwalker
@MilesMorales 我对我的帖子进行了编辑,请看一下。要在1和-1之间进行突出显示,只需使用条件 abs(x) < 1 - Maurits Evers
@MilesMorales,你似乎一直在不断更改你的问题陈述。首先是单个尾部区域,然后是1和-1之间的区域,现在是<2.5和>1.5的区域。对于未来的帖子,请从一开始就发布一个清晰的问题陈述。我已经进行了另一个编辑,向你展示如何突出显示<2.5和>1.5的区域。为了预防另一个问题:据我所知,“gghighlight”方法只适用于连续的区域。这意味着你不能在单个调用中突出显示正负尾端。希望这可以帮到你! - Maurits Evers
让我们在聊天中继续这个讨论 - Angel Cloudwalker
原问题从未改变,你的解决方案也不是问题的解决方案,就像我的一样,你的只是另一种选择,就像我的一样。我只是在与你交流你的替代方法,但如果你只想要原问题的答案并认为这是浪费时间,那么你完全没有继续这个交流的义务。我也在聊天中开了一个讨论,但你想在这里继续来回交流。无论如何,还是感谢你分享,谢谢! - Angel Cloudwalker
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接