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

如何为ggplot热力图设置跨多刻度的自定义X轴标签?

问题:如何给热力图X轴添加跨刻度的分组标签?

我绘制了一张热力图,代码如下:

library(tidyverse)
df = data.frame(V1 = letters[1:10], V2 = letters[11:20], estimate = rnorm(10), meta_group = c(rep("class_1", 3), rep("class_2", 2), rep("class_3", 5)))

df %>%
    ggplot(aes(x=V1, y=V2, fill=estimate)) +
    geom_tile()

我希望将X轴标签设置为meta_group的对应值,且每个meta_group的标签能够横跨其对应的所有X轴刻度范围(示例图中"c2"应为"class_2"),请问该如何实现?

解决方案

可以借助ggh4x包的guide_axis_nested()功能实现这种跨刻度的分组X轴标签,步骤如下:

  1. 安装并加载ggh4x包:
install.packages("ggh4x")
library(ggh4x)
  1. 对原数据的X轴变量做嵌套处理:将meta_group与V1用分隔符(默认|)拼接成新的因子变量,保证顺序和原数据一致:
df <- df %>%
  mutate(x_nested = factor(paste(meta_group, V1, sep = "|"),
                          levels = paste(meta_group, V1, sep = "|")))
  1. 绘制热力图时,使用新的嵌套变量作为X轴,通过scale_x_discrete指定嵌套轴标签:
df %>%
  ggplot(aes(x = x_nested, y = V2, fill = estimate)) +
  geom_tile() +
  scale_x_discrete(guide = guide_axis_nested(delim = "|")) +
  labs(x = NULL) # 可按需保留或修改X轴标题

这样每个meta_group的标签会自动横跨对应所有X轴刻度,同时下方保留原V1的刻度标识。

如果不想额外安装包,也可以手动计算分组的中心位置,用annotation_custom添加文本框,但操作相对繁琐,ggh4x的方法更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:39:40