r - 如何添加图例来指示颜色代码而不是数据?
问题描述
我正在努力为使用 PwrPlot() 函数创建的绘图添加颜色代码(图例),如下所示。这是一个教学演示,我只需要用一个图例替换标签(alpha,beta,1-alpha,1-beta),指示每种颜色所指的内容(实际上,更改曲线的参数可能会导致一些'图中的“丑陋”标签位置!)。运行此函数还会发出我无法解释的警告:
警告消息:1:在 is.na(x) 中:is.na() 应用于“表达式”类型的非(列表或向量)
任何帮助将不胜感激!谢谢
PwrPlot <- function(mu0=0, mu1=1.9, sig0=1, sig1=1, alpha=0.05, tail=1){
ggplot(data.frame(x = -4:5), aes(x)) +
stat_function(fun = dnorm, args = c(mu0, sig0), geom = 'area',
xlim = c(qnorm(1-alpha/tail, mu0, sig0), 5), fill = 'red') +
stat_function(fun = dnorm, args = c(mu0, sig0)) +
stat_function(fun = dnorm, args = c(mu0, sig0), geom = 'area',
xlim = c(-4, qnorm(1-alpha/tail, mu0, sig0)), fill = 'deepskyblue3') +
stat_function(fun = dnorm, args = c(mu0, sig0)) +
stat_function(fun = dnorm, args = c(mu1, sig1)) +
stat_function(fun = dnorm, args = c(mu1, sig1), geom = 'area',
xlim = c(qnorm(1-alpha/tail, mu0, sig0), 5), fill = 'cyan4', alpha=0.2) +
stat_function(fun = dnorm, args = c(mu1, sig1), geom = 'area',
xlim = c(-4, qnorm(1-alpha/tail, mu0, sig0)), fill = 'chocolate3', alpha=0.5) +
geom_text(x=-0.4, y=0.18, label=expression(1-alpha), size=10, col="white") +
geom_text(x=2, y=0.018, label=expression(alpha), size=10, col="white") +
geom_text(x=1, y=0.1, label=expression(beta), size=10, col="white") +
geom_text(x=2.5, y=0.1, label=expression(1-beta), size=10, col="black") +
geom_text(x=-1.7, y=0.35, label="H0", size=10, col="black") +
geom_text(x=3.5, y=0.35, label="H1", size=10, col="black") +
labs(y="Densité")
}
PwrPlot()
解决方案
您可以将颜色放入其中aes()
并结合scale_fill_identity()
您可以构建图例。
library(ggplot2)
PwrPlot <- function(mu0=0, mu1=1.9, sig0=1, sig1=1, alpha=0.05, tail=1){
ggplot(data.frame(x = -4:5), aes(x)) +
stat_function(fun = dnorm, args = c(mu0, sig0), geom = 'area',
xlim = c(qnorm(1-alpha/tail, mu0, sig0), 5),
aes(fill = 'red')) +
stat_function(fun = dnorm, args = c(mu0, sig0)) +
stat_function(fun = dnorm, args = c(mu0, sig0), geom = 'area',
xlim = c(-4, qnorm(1-alpha/tail, mu0, sig0)),
aes(fill = 'deepskyblue3')) +
stat_function(fun = dnorm, args = c(mu0, sig0)) +
stat_function(fun = dnorm, args = c(mu1, sig1)) +
stat_function(fun = dnorm, args = c(mu1, sig1), geom = 'area',
xlim = c(qnorm(1-alpha/tail, mu0, sig0), 5),
aes(fill = 'cyan4'), alpha=0.2) +
stat_function(fun = dnorm, args = c(mu1, sig1), geom = 'area',
xlim = c(-4, qnorm(1-alpha/tail, mu0, sig0)),
aes(fill = 'chocolate3'), alpha=0.5) +
scale_fill_identity(
labels = expression(beta, 1-alpha, 1-beta, alpha),
guide = guide_legend()
) +
annotate(
"text", size = 10,
x = c(-0.4, 2, 1, 2.5, -1.7, 3.5),
y = c(0.18, 0.018, 0.1, 0.1, 0.35, 0.35),
label = expression(1-alpha, alpha, beta, 1-beta, "H0", "H1"),
colour = rep(c("white", "black"), each = 3)
) +
labs(y="Densité")
}
PwrPlot()
#> Warning in is.na(x): is.na() applied to non-(list or vector) of type
#> 'expression'
由reprex 包(v2.0.1)于 2021 年 10 月 14 日创建
推荐阅读
- java - 增强的 switch 语句可以有多个赋值吗?
- realex-payments-api - 全球支付 Realex HPP - 请勿发送至商家网址
- azure - 如何在我的 Azure Data Lake Store 帐户上启用-AzureRmDataLakeStoreKeyVault?
- python - 有没有办法使用 python 脚本在 adb 中推送以下文件?
- terraform - 如何使用 terraform 0.12 将地图转换为另一张地图?
- c - char 的 va_arg 故障
- sql - 如何编写基于时间戳显示细分的 PostgreSQL 查询
- c - GTK3 调整问题
- sql - 如何在sql查询中将时区更改为MST?
- java - 随着时间的推移,休眠速度变慢