如何用R语言ggplot2在同一张图中绘制两条带置信区间的折线
R语言ggplot2双组带置信区间折线图实现方案
实现逻辑
将两组数据合并为统一数据集并新增分组标识,通过ggplot2的美学映射自动为两组分配不同的折线、置信区间填充色,同时自动生成对照图例。
完整可运行代码
library(ggplot2) # 1. 读取两组数据 data1 <- read.table("group1.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) data2 <- read.table("group2.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) # 2. 为数据集添加分组标签,可根据需求修改名称 data1$group <- "组1" data2$group <- "组2" # 3. 合并为总数据集 all_data <- rbind(data1, data2) # 4. 绘图 p <- ggplot(all_data, aes(x=Trial, y=Data, color=group, fill=group)) + theme_bw() + # 可根据两组数据的实际范围调整坐标轴 xlim(1, 49) + ylim(0.3, .95) + theme( plot.title = element_text(color="black", size=14, face="bold.italic"), axis.title.x = element_text(color="Black", size=25), axis.title.y = element_text(color="Black", size=25), axis.text.x = element_text(color = "black",face = "bold", size = 22, angle = 0), axis.text.y = element_text(color = "black",face = "bold", size = 22, angle = 0), axis.line = element_line(color = "black", size = 1, linetype = "solid"), plot.caption = element_text(color = "black", size =11, face = "bold.italic"), axis.ticks.length=unit(.25, "cm"), # 图例样式调整,可按需修改 legend.title = element_text(size=20, face="bold"), legend.text = element_text(size=18, face="bold"), legend.position = "top" ) + theme(panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank()) + # 置信区间图层,alpha调整透明度 geom_ribbon(aes(ymin=Data-CI, ymax=Data+CI), alpha=0.2, color = "gray35", size = 0.1) + # 折线图层 geom_line(size=2) + # 自定义两组的颜色,可按需修改 scale_color_manual(values = c("组1" = "black", "组2" = "darkblue")) + scale_fill_manual(values = c("组1" = "gold", "组2" = "skyblue")) + # 坐标轴与图例标签 labs(x = "Trial", y = "Go probability", color = "分组", fill = "分组") print(p)
可选简化方案
如果不需要自动生成图例,也可以直接在原有代码基础上新增第二组的图层,手动指定数据源即可:
# 读取第二组数据 data2 <- read.table("group2.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) # 在你原有group1绘图代码的基础上新增以下两行 p <- p + geom_ribbon(data = data2, aes(ymin=Data-CI, ymax=Data+CI), alpha=0.2, fill = "skyblue", color = "gray35", size = 0.1) + geom_line(data = data2, size=2, color="darkblue")
内容的提问来源于stack exchange,提问作者A.Rainer
相关产品推荐
相关产品推荐

