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

如何使用ggplot2绘制三角形热图并仅保留上/下三角部分

你可以通过固定SFE列的因子顺序,再通过位置索引筛选行的方式实现只保留三角热图,具体操作如下:

步骤1:固定轴顺序

首先要保证x轴和y轴的SFE项顺序完全一致,我们先提取所有唯一的SFE名称,将两列都转成固定顺序的因子:

# 提取所有唯一的SFE名称
all_sfe <- unique(c(df_triheatmap$SFE_1, df_triheatmap$SFE_2))
# 固定SFE_1和SFE_2的因子顺序,保证x/y轴顺序完全匹配
df_triheatmap$SFE_1 <- factor(df_triheatmap$SFE_1, levels = all_sfe)
df_triheatmap$SFE_2 <- factor(df_triheatmap$SFE_2, levels = all_sfe)

步骤2:按位置筛选数据

给每个SFE项分配对应的位置索引,按索引筛选你要保留的三角部分:

# 给两列分别添加位置索引
df_triheatmap$idx1 <- as.numeric(df_triheatmap$SFE_1)
df_triheatmap$idx2 <- as.numeric(df_triheatmap$SFE_2)

# 筛选保留下三角(idx1 > idx2),过滤掉上三角和对角线数据
df_tri_lower <- df_triheatmap[df_triheatmap$idx1 > df_triheatmap$idx2, ]

# 如果你要保留上三角,用这行代码
# df_tri_upper <- df_triheatmap[df_triheatmap$idx1 < df_triheatmap$idx2, ]

# 需要保留对角线的话,把运算符改成 >= 或者 <= 即可

步骤3:画图

直接用筛选后的数据集画图即可,你原来的画图代码不需要修改,只要把输入数据换成筛选后的数据集:

ggplot(df_tri_lower, aes(SFE_1, SFE_2, fill = overlap)) +
  geom_raster() +
  scale_fill_distiller(palette = "Spectral") +
  theme_minimal() +
  theme(panel.grid = element_blank())

可选方案:保留原始数据行数,将不需要的部分设为空白

如果你不想修改原始数据的行数,也可以把不需要展示的区域的overlap值设为NA,ggplot会自动将这部分渲染为空白:

# 把上三角区域的overlap设为NA,仅展示下三角
df_triheatmap$overlap[df_triheatmap$idx1 <= df_triheatmap$idx2] <- NA

这样直接用原始数据画图就能得到三角热图效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:51:03