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

R语言使用ggpubr的geom_signif报错及ggplot图例显示异常求助

问题排查与解决

1. 图例形状显示异常问题

原因

  • 代码重复调用geom_point():第一次带aes(shape='mean')映射用来生成图例,第二次无映射的geom_point()会绘制所有原始数据点,覆盖之前的形状映射逻辑
  • geom_boxplot默认绘制离群点,且绘图顺序在均值点图层之后,离群点形状会干扰均值图例的显示
  • scale_shape_manual未明确设置名称和标签,导致图例匹配异常

修复方案

  • 删除多余的无映射geom_point()
  • 给geom_boxplot添加outlier.shape = NA参数,关闭箱线图自带的离群点绘制,如需展示离群点可单独调用geom_point()并设置独立的形状映射
  • 调整scale_shape_manual配置,明确关联均值的形状映射

2. stat_signif()计算报错问题

原因

  • 分组名称不匹配:scale_x_discrete中自定义的labels和geom_signif的comparisons参数里的分组名称不一致(例如原分组的Vehicle - Vehicle在labels里被改成了Vehicle- Vehicle,空格位置存在差异),导致函数无法匹配到对应分组
  • 未手动指定显著性条的位置:10组比较共用自动计算的y轴位置,容易超出y轴范围导致计算失败
  • 部分组间差异检验默认算法(Wilcoxon秩和检验)在组内样本量过小、方差为0时会计算失败

修复方案

  • 提前统一分组名称:直接修改原始数据的Drug列为因子类型,将水平名改为你需要的显示名称,不要仅通过scale_x_discrete修改标签,保证comparisons里的分组名和因子水平完全一致
  • 合并多组比较到同一个geom_signif调用中,通过step_increase参数自动调整显著性条的高度,避免位置溢出
  • 如仍存在检验失败问题,可添加test = "t.test"参数指定检验方法适配你的数据特征

修正后完整代码

library(tidyverse)
library(ggplot2)
library(ggpubr)

# 提前修改分组因子水平,保证名称统一
PhospholipaseA2NOPo1$Drug <- factor(PhospholipaseA2NOPo1$Drug,
  levels = c("Blank", "Vehicle - Vehicle", "Vehicle - Nicotinic Acid", "SP - Vehicle", "SP - Nicotinic Acid"),
  labels = c("Blank", "Vehicle- Vehicle", "Vehicle - Nicotinic Acid", "SP - Vehicle", "SP - Nicotinic Acid")
)

ggplot(PhospholipaseA2NOPo1, aes( x = Drug, y = Absorbance))+
  geom_line(aes(linetype='median'),size=1)+
  ggtitle("Comparison of the effect of Blank, Vehicle - Vehicle, Vehicle - Nicotinic Acid, SP - Vehicle, and SP -Nicotinic Acid on microglia - Phospholipase A2 Assay ") +
  labs(x = "Treatment",
       y = expression(paste("Absorbance " ~ "(", A[425], " - ", A[600] ~ nm, ")"))) +
  stat_summary(fun=mean, aes(shape='mean'), colour="black", geom="point", size=3) + 
  geom_boxplot(fill=c("#2171B5","#DEEBF7", "#CC79A7", "#CC79A7", "#CC79A7"), width=0.2,notch = FALSE, outlier.shape = NA)+
  stat_compare_means(label.y = 0.50, label.x = 3.25)+
  # 合并所有显著性比较,自动调整高度
  geom_signif(
    comparisons = list(
      c("Blank", "Vehicle- Vehicle"),
      c("Blank", "Vehicle - Nicotinic Acid"),
      c("Blank", "SP - Vehicle"),
      c("Blank", "SP - Nicotinic Acid"),
      c("Vehicle- Vehicle", "Vehicle - Nicotinic Acid"),
      c("Vehicle- Vehicle", "SP - Vehicle"),
      c("Vehicle- Vehicle", "SP - Nicotinic Acid"),
      c("Vehicle - Nicotinic Acid", "SP - Vehicle"),
      c("Vehicle - Nicotinic Acid", "SP - Nicotinic Acid"),
      c("SP - Vehicle", "SP - Nicotinic Acid")
    ),
    map_signif_level = TRUE,
    colour = "#cf1b1b",
    step_increase = 0.05,
    na.rm = TRUE
  )+
  theme_bw() +
  theme(panel.grid.major = element_line(colour = "#d3d3d3"),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(), panel.background = element_blank(),
        plot.title = element_text(size = 14, face = "bold"),
        axis.text.x = element_text(face="bold", color="#3142b0", size=8.9, angle=0),
        axis.text.y = element_text(face="bold", color="#3142b0", size=8.9, angle=0),
        legend.spacing.y = unit(0.01, "cm"))+
  scale_linetype_manual('Legend',values='solid')+
  scale_shape_manual(' ',values = 18)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:15:03