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

R语言ggplot整合多数据框绘制带误差棒散点图方法

整合多数据框绘制带误差棒的散点图实现方案

核心逻辑:先将3个宽格式数据框统一转换为长格式,再按「样本+指标」的维度匹配合并为一张完整绘图表,即可直接调用ggplot2的误差棒图层绘图。

前置说明

示例数据中用空字符串""表示缺失值,需要先统一替换为R识别的NA值,并将数值列转为数值类型,否则会出现映射报错。

完整实现代码

library(tidyverse)

# ------------ 示例数据 ------------
DT <- data.frame(Samples=c("D1", "D2", "D3", "D4"),
                 ACE=c(0.184, -0.169, 0.054, 0.087),
                 FLN=c(-0.257, -0.239, -0.009, 0.038),
                 ANT=c(-0.166, -0.304, 0.238, "" ),
                 stringsAsFactors=FALSE)

LowerLim <- data.frame(Samples=c("D1", "D2", "D3", "D4"),
                       ACE=c(-1.514, "", -1.644, -1.611),
                       FLN=c("", "", "", -1.660),
                       ANT=c(-1.865, -2.003, 1.937, ""),
                       stringsAsFactors=FALSE)

UpperLim <- data.frame(Samples=c("D1", "D2", "D3", "D4"),
                       ACE=c(-0.560, "", -0.689,-0.657),
                       FLN=c("", "", "", -0.706),
                       ANT=c(-0.911,-1.049,0.983, "" ),
                       stringsAsFactors=FALSE)

# ------------ 数据预处理 ------------
# 批量处理空值、转换数值列类型
process_tbl <- function(raw_df){
  raw_df %>% 
    mutate(across(-Samples, ~na_if(., "") %>% as.numeric()))
}
DT <- process_tbl(DT)
LowerLim <- process_tbl(LowerLim)
UpperLim <- process_tbl(UpperLim)

# 转换为长格式(老版本tidyr可替换为gather,逻辑一致)
DT_long <- DT %>% pivot_longer(-Samples, names_to = "Cds", values_to = "value")
Lower_long <- LowerLim %>% pivot_longer(-Samples, names_to = "Cds", values_to = "lower")
Upper_long <- UpperLim %>% pivot_longer(-Samples, names_to = "Cds", values_to = "upper")

# 合并为绘图用总表
plot_data <- DT_long %>% 
  left_join(Lower_long, by = c("Samples", "Cds")) %>% 
  left_join(Upper_long, by = c("Samples", "Cds")) %>% 
  # 固定样本显示顺序
  mutate(Samples = factor(Samples, levels = unique(Samples)))

# ------------ 绘图 ------------
# 设置点和误差棒的 dodge 位置,避免同x轴位置元素重叠
dodge_pos <- position_dodge(width = 0.5)

ggplot(plot_data, aes(x = Cds, color = Samples))+
  # 先画误差棒,再画散点,保证散点在视觉上层
  geom_errorbar(aes(ymin = lower, ymax = upper),
                width = 0.2, # 误差棒两端短横的宽度
                position = dodge_pos,
                na.rm = TRUE)+ # 自动跳过缺失值的条目
  geom_point(aes(y = value),
             position = dodge_pos,
             size = 2,
             na.rm = TRUE)+
  theme(axis.title.x = element_blank(),
        axis.text.x=element_text(size=7, angle=90,hjust=0.95,vjust=0.2))+
  ggtitle("Scatter plot with error bars")

参数调整说明

  • 如果你习惯用旧版的gather函数做长宽转换,替换pivot_longer部分即可,合并和绘图逻辑完全不变
  • position_dodge的width参数可以调整同一x轴分类下不同样本点的间距,根据实际指标数量调整即可
  • 误差棒的颜色、线型、粗细都可以在geom_errorbar里通过color、linetype、linewidth参数自定义

内容的提问来源于stack exchange,提问作者R noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:06:27