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

如何在ggplot的ggline中设置误差条的透明度(alpha=0.5)

如何给ggline的误差条设置透明度(alpha=0.5)

我尝试给ggline绘制的误差条设置透明度alpha=0.5,当前使用的代码如下:

ggline(desfactorial, x = "Water_added", y = "PCR", color = "Solvent",
       add = "mean_sd", size=1,
       palette = c("#009E73", "#E69F00", "#0072B2"), 
       xlab = "Water added / g",
       ylab ="Protein-carbohydrate ratio", legend="right", error.plot = "errorbar") + 
  geom_hline(yintercept = mean(desfactorial$PCR, na.rm=TRUE),linetype='dotted', col = 'grey', size=1)+
theme(axis.text=element_text(size=20), axis.title=element_text(size=20,face="bold"), legend.title=element_text(size=20, face="bold"),legend.text=element_text(size=20))+     scale_x_discrete(labels = scales::label_parse())

图表示例

我想知道能不能在error.plot参数里直接设置所需的alpha值,以下是使用的数据集:

desfactorial <- data.frame(
  Solvent = factor(c(
    "Water", "Water", "Water", "Water", "Water", "Water", "Water",
    "Water", "ChCl:2Gly", "ChCl:2Gly", "ChCl:2Gly", "ChCl:2Gly",
    "ChCl:2Gly", "ChCl:2Gly", "ChCl:2Gly", "ChCl:2Gly", "ChCl:2Urea",
    "ChCl:2Urea", "ChCl:2Urea", "ChCl:2Urea", "ChCl:2Urea", "ChCl:2Urea",
    "ChCl:2Urea", "ChCl:2Urea", "ChCl:2Urea", "ChCl:2Urea", "Water",
    "Water", "Water", "Water", "Water", "Water", "ChCl:2Gly", "ChCl:2Gly",
    "ChCl:2Gly", "ChCl:2Gly", "ChCl:2Gly", "ChCl:2Gly", "ChCl:2Urea",
    "ChCl:2Urea", "ChCl:2Urea", "ChCl:2Urea"
  )),
  Water_added = factor(
    c(
      "0", "0", "3", "3", "6", "6", "20", "20", "0", "0", "3", "3",
      "6", "6", "20", "20", "0", "0", "3", "3", "6", "6", "20", "20",
      "45", "45", "10", "10", "30", "30", "45", "45", "10", "10", "30",
      "30", "45", "45", "10", "10", "30", "30"
    ),
    levels = c("0", "3", "6", "10", "20", "30", "45")
  ),
  PRY = c(
    5.1476543701677, 5.24206405872243, 5.38853875361231, 5.54209197950729,
    5.59692261420859, 5.33758024267941, 6.35605594568486, 6.11398365482863,
    5.6275477119015, 5.55850593100969, 6.56805384213524, 6.71367492865504,
    6.82559818297811, 7.04188813664945, 7.90352355877037, 8.24946798339131,
    7.22111750906, 6.8410364885922, 6.98847106262559, 7.29277790286923,
    8.80926606615939, 8.92784511466374, 10.0114247638609, 9.40760655480343,
    8.32376937032233, 8.52028563666514, 6.16362677140164, 6.22644550947947,
    6.50077762048591, 6.34718054340683, 5.79605607812372, 6.26225533957947,
    6.93671532060051, 7.87123213762398, 7.51694018439269, 8.06930986110173,
    8.42323297518708, 8.22990329914185, 8.95475913956326, 8.35304817442309,
    8.2430160707796, 8.28151339125548
  ),
  CRY = c(
    11.5646290023399, 11.9638056665846, 12.2101627720237, 12.12285427245,
    12.155046705445, 11.8170692856966, 12.1250520787855, 12.4769641088183,
    10.4098577086808, 10.0544782849387, 11.3132581407265, 11.9730393450593,
    12.1133712743981, 11.6130134011753, 12.6426813224131, 12.1306042501626,
    11.6526145416142, 10.7116583486815, 11.7765361401332, 11.8823371989241,
    12.4227694735619, 12.0000292939802, 13.7043627792218, 12.4865426127152,
    12.8966146437781, 13.1792533796986, 12.3812896168193, 12.7271148582088,
    11.8381098438314, 11.952576146431, 12.2907792592306, 12.2551976925363,
    11.7625448257849, 13.1684808685182, 12.4333413472634, 12.9705340638451,
    13.1165857506246, 12.9864605632202, 12.4447925660838, 13.2160423711566,
    12.9029170459932, 13.2076320425397
  ),
  PCR = c(
    0.445120580100421, 0.438160248069201, 0.441315882042024, 0.457160653337395,
    0.460460806925684, 0.451683925483961, 0.524208548085801, 0.490021739383499,
    0.540597947578928, 0.552838822013882, 0.580562536489023, 0.560732720837958,
    0.563476345961934, 0.606379058852782, 0.625146150346991, 0.680054168223378,
    0.61969933728364, 0.638653350014123, 0.593423310510604, 0.613749448511659,
    0.709122557969639, 0.743985276697817, 0.730528294175045, 0.753419649184842,
    0.645422818331483, 0.646492285351297, 0.497817833372438, 0.489226786969987,
    0.549139829435973, 0.531030337363888, 0.471577591288264, 0.510987704702089,
    0.589729129481774, 0.597732738970799, 0.604579249812617, 0.622126261060802,
    0.642181825006251, 0.633729510752936, 0.71955873044987, 0.632038543751438,
    0.638849032462727, 0.627024841741654
  )
)

解决方案

ggpubr包的ggline函数,其error.plot参数本身不支持直接设置alpha值,不过可以通过以下两种方法实现需求:

方法1:手动计算统计量并添加误差条(推荐)

先分组计算均值和标准差,再用geom_errorbar手动添加误差条,这样就能直接设置透明度参数:

library(dplyr)
# 计算各组的均值和标准差
summary_data <- desfactorial %>%
  group_by(Solvent, Water_added) %>%
  summarise(mean_PCR = mean(PCR, na.rm = TRUE),
            sd_PCR = sd(PCR, na.rm = TRUE),
            .groups = "drop")

# 绘制图形并添加带透明度的误差条
ggline(summary_data, x = "Water_added", y = "mean_PCR", color = "Solvent",
       size=1,
       palette = c("#009E73", "#E69F00", "#0072B2"), 
       xlab = "Water added / g",
       ylab ="Protein-carbohydrate ratio", legend="right") +
  # 添加误差条,设置alpha=0.5
  geom_errorbar(aes(ymin = mean_PCR - sd_PCR, ymax = mean_PCR + sd_PCR),
                width = 0.2, alpha = 0.5, position = position_dodge(0.8)) +
  geom_hline(yintercept = mean(desfactorial$PCR, na.rm=TRUE),linetype='dotted', col = 'grey', size=1)+
  theme(axis.text=element_text(size=20), axis.title=element_text(size=20,face="bold"), legend.title=element_text(size=20, face="bold"),legend.text=element_text(size=20))+
  scale_x_discrete(labels = scales::label_parse())

方法2:修改已生成图形的图层属性

如果不想重新计算统计量,可以直接修改ggline生成的误差条图层的alpha值:

# 先生成原始图形
p <- ggline(desfactorial, x = "Water_added", y = "PCR", color = "Solvent",
       add = "mean_sd", size=1,
       palette = c("#009E73", "#E69F00", "#0072B2"), 
       xlab = "Water added / g",
       ylab ="Protein-carbohydrate ratio", legend="right", error.plot = "errorbar") + 
  geom_hline(yintercept = mean(desfactorial$PCR, na.rm=TRUE),linetype='dotted', col = 'grey', size=1)+
theme(axis.text=element_text(size=20), axis.title=element_text(size=20,face="bold"), legend.title=element_text(size=20, face="bold"),legend.text=element_text(size=20))+
scale_x_discrete(labels = scales::label_parse())

# 提取图形结构并修改误差条的alpha值
p_build <- ggplot_build(p)
# 误差条通常是第二个图层,可根据实际情况调整索引
p_build$data[[2]]$alpha <- 0.5  
# 重新构建图形并绘制
p <- ggplot_gtable(p_build)
plot(p)

内容的提问来源于stack exchange,提问作者David Moldes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:52:33