You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为PwrPlot生成的ggplot图形添加颜色图例并解决运行警告问题

警告问题修复

你遇到的is.na() applied to non-(list or vector) of type 'expression'警告是旧版ggplot2对geom_text中直接传入expression对象的兼容性问题,将expression写法替换为文本字符串+parse=TRUE参数即可消除警告。

自动图例实现

原代码直接在stat_function中指定固定fill值,没有映射到ggplot的美学维度,因此无法自动生成图例。只需要把每个填充区域的fill参数放到aes()内部,赋值为对应区域的含义标签,再用scale_fill_manual手动匹配颜色和显示标签,即可生成适配参数变化的图例,无需写死坐标的文本标注。

修改后完整代码

PwrPlot <- function(mu0=0, mu1=1.9, sig0=1, sig1=1, alpha=0.05, tail=1){
  # 提前计算临界值,避免重复运算
  cutoff <- qnorm(1-alpha/tail, mu0, sig0)
  ggplot(data.frame(x = -4:5), aes(x)) + 
    # H0分布拒绝域(对应alpha)
    stat_function(fun = dnorm, args = c(mu0, sig0), geom = 'area', 
                  xlim = c(cutoff, 5), aes(fill = "alpha")) + 
    stat_function(fun = dnorm, args = c(mu0, sig0)) +
    # H0分布接受域(对应1-alpha)
    stat_function(fun = dnorm, args = c(mu0, sig0), geom = 'area', 
                  xlim = c(-4, cutoff), aes(fill = "1-alpha")) + 
    stat_function(fun = dnorm, args = c(mu0, sig0)) +
    # H1分布曲线
    stat_function(fun = dnorm, args = c(mu1, sig1)) +
    # H1分布拒绝域(对应检验功效1-beta)
    stat_function(fun = dnorm, args = c(mu1, sig1), geom = 'area', 
                  xlim = c(cutoff, 5), alpha=0.2, aes(fill = "1-beta")) +
    # H1分布接受域(对应第二类错误beta)
    stat_function(fun = dnorm, args = c(mu1, sig1), geom = 'area', 
                  xlim = c(-4, cutoff), alpha=0.5, aes(fill = "beta")) +
    # H0、H1标注改为相对分布均值的位置,参数修改后不会错位
    geom_text(x=mu0-1.7, y=dnorm(mu0, mu0, sig0)+0.03, label="H0", size=10, col="black") +
    geom_text(x=mu1+1.6, y=dnorm(mu1, mu1, sig1)+0.03, label="H1", size=10, col="black") +
    # 手动匹配填充色和图例公式标签
    scale_fill_manual(
      name = "参数含义",
      values = c(
        "alpha" = "red",
        "1-alpha" = "deepskyblue3",
        "beta" = "chocolate3",
        "1-beta" = "cyan4"
      ),
      labels = ~parse(text = .x)
    ) +
    labs(y="Densité") +
    # 适配教学场景的图例样式调整,可按需修改
    theme(
      legend.position = "top",
      legend.text = element_text(size = 12),
      legend.title = element_text(size = 14)
    )
}
PwrPlot()

修改后的代码运行后不会再触发之前的警告,图例可自动展示各颜色对应的参数含义,调整mu0、mu1、alpha等曲线参数时,图例和标注都不会出现错位问题,完全适配教学演示场景。

内容的提问来源于stack exchange,提问作者Daniel Coulombe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:15:04