我试图在R
中绘制一个类似于G*Power生成的图:
x1c 0d1x的数据
其中,当H0 >= 2
时,左侧分布H0
被着色为红色,而当H1 < 2
时,右侧分布被着色为蓝色。
通过以下方式生成数据:
install.packages("bayestestR")
mean1 <- 0
sd1 <- 1
data1 <- bayestestR::rnorm_perfect(n = 1000, mean1, sd1)
df.data1 <- data.frame(x = data1) %>% mutate(y = dnorm(x))
df.data1$dist <- "H0"
mean2 <- 2.5
sd2 <- 1
data2 <- bayestestR::rnorm_perfect(n = 1000, mean2, sd2)
df.data2 <- data.frame(x = data2) %>% mutate(y = dnorm(x))
df.data2$dist <- "H1"
df.both <- rbind(df.data1, df.data2)
字符串
下面的代码可以生成第一个目标:
ggplot(df.both, aes(x = x, fill = dist)) +
geom_density(alpha = 0.5) +
geom_ribbon(data = subset(df.both, dist == "H0"), aes(ymin = 0, ymax = ifelse(x >= 2, y, 0)), fill = "pink", alpha = 0.5) +
geom_ribbon(data = subset(df.both, dist == "H0"), aes(ymin = 0, ymax = ifelse(x >= 2, y, 0)), fill = "red", alpha = 0.5) +
labs(x = "x", fill = "Distribution") +
scale_fill_manual(values = c("H0" = "pink", "H1" = "lightblue")) +
theme_minimal()
型
的
但我能得到的最接近第二个的是通过:
ggplot(df.both, aes(x = x, fill = dist)) +
geom_density(alpha = 0.5) +
geom_ribbon(data = subset(df.both, dist == "H1"), aes(ymin = 0, ymax = ifelse(x <= 2, y, 0)), fill = "blue", alpha = 0.5) +
geom_ribbon(data = subset(df.both, dist == "H1"), aes(ymin = 0, ymax = ifelse(x <= 2, y, 0)), fill = "lightblue", alpha = 0.5) +
labs(x = "x", fill = "Distribution") +
scale_fill_manual(values = c("H0" = "pink", "H1" = "lightblue")) +
theme_minimal()
型
其中,不正确地,右手边的H1
在与左手边的H0
重叠的部分之外没有被涂成蓝色,但是在同一条带中,H0
被不正确地涂成蓝色。
我不需要使用ggplot2
(见鬼,在这一点上,我将使用蜡笔和餐巾纸)-只是一些清晰和可复制的东西。This使用ggplot::stat_function
看起来很有希望,但我一直无法弄清楚如何在其他位置(例如,其中平均值= 2.5)创建其他正态分布。
先谢谢你。
2条答案
按热度按时间sshcrbum1#
下面是使用
stat_function
的开始:字符串
的数据
尽管有特殊的颜色和标签。
初始
data.frame(X=c(-3,6))
的使用主要用于定义图的域(x的范围)。ekqde3dh2#
使用
stat_function
:字符串
的数据
使用
geom_function
+geom_polygon
:型
的
请注意,您可以单独使用
polygon
。ggplot
函数是非常相关的。一个人可以用多种方法解决同一个问题型