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

如何在R的ggplot箱线图X轴下方添加彩色块?

解决X轴下方添加彩色块的方案

要在X轴下方添加彩色块,你可以通过geom_rect手动绘制矩形色块,具体步骤如下:

1. 准备色块数据

ggplot会将离散X轴的类别按顺序映射为1、2、3…的数值位置,我们先创建一个包含每个cluster位置和对应颜色的数据框:

# 获取cluster的唯一顺序(与X轴显示顺序一致)
cluster_order <- unique(filtered_lymph$cluster)
# 创建色块数据框:定义每个色块的边界与颜色
rect_data <- data.frame(
  x = factor(cluster_order, levels = cluster_order),
  xmin = seq_along(cluster_order) - 0.4,  # 宽度与箱线图的dodge参数匹配
  xmax = seq_along(cluster_order) + 0.4,
  ymin = -2,  # 色块底部,低于y轴最小值
  ymax = 0,   # 色块顶部,对齐y轴原点
  fill_color = c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2")  # 自定义颜色,按需替换
)

2. 修改绘图代码,添加色块

在原有ggplot代码的最开头(底层)加入geom_rect,关闭继承原有美学映射以避免冲突:

p_lymph <- ggplot(filtered_lymph, aes(x = cluster, y = `total cells`, fill = New_Condition, color = New_Condition)) +
  # 添加X轴下方的彩色块
  geom_rect(data = rect_data, 
            aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = I(fill_color)),
            inherit.aes = FALSE) +
  # 原有箱线图代码
  geom_boxplot(position = position_dodge(width = 0.8), size = 0.9,linetype="solid", outlier.shape=NA) +
  scale_fill_manual(values=fill_colors) +
  scale_color_manual(name="Condition", values = outline_colors) +
  theme_minimal()+
  guides(fill="none",color="none")+
  labs(y="Total cells (%)",
       x="Lymphoid")+
  scale_x_discrete(labels=x_lym_labels)+
  theme(
    axis.line=element_line(color="black",linewidth=0.5,linetype="solid"),
    axis.text.x=element_text(angle=45,vjust=1,hjust=1),
    axis.ticks.x=element_line(colour="black",linewidth=0.5),
    axis.ticks.y=element_line(colour="black", linewidth=0.5),
    panel.grid=element_blank()
  )+
  scale_y_continuous(breaks=seq(-2,25, by=5),
                     limits=c(-2,25),  # 扩展y轴范围以显示色块
                     labels=c("", "0","5","10","15","20","25")  # 隐藏-2的标签,避免干扰
                     )

print(p_lymph)

关键说明

  • 扩展scale_y_continuous的limits到-2,确保色块能完整显示,同时将-2对应的标签设为空字符串,保持视觉整洁。
  • geom_rect的xmin和xmax设置为seq_along(cluster_order) ±0.4,与箱线图的position_dodge(width=0.8)宽度匹配,保证色块和对应cluster的箱线图对齐。
  • 使用I(fill_color)直接指定颜色,避免与箱线图的fill美学映射冲突,无需额外配置颜色比例尺。

如果你的彩色块需要按New_Condition分组,只需调整rect_data中的fill_color对应分组逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:40:32