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

如何在ggplot中合并热图并使对应变量在Y轴相邻?

解决思路与实现代码

要实现对应变量(如var_a与var_x)相邻的合并热图,核心是先合并数据框,再通过自定义因子顺序控制变量排列——直接在ggplot里配置很难实现精准的成对排序,优先处理数据结构是更稳妥的方案。

步骤1:修正原始代码错误

你的df_two_long存在数据源误用的问题,同时需要统一两个数据框的列名,保证结构一致:

library(tidyr)
library(ggplot2)

# 处理第一个数据框
df_one <- data.frame(
  vars = c("var_a", "var_b", "var_c"),
  corresponding_vars = c("var_x", "var_y", "var_z"),
  expression_organ_1_vars = c(5, 10, 20),
  expression_organ_2_vars = c(50, 2, 10),
  expression_organ_3_vars = c(5, 10, 3)
)

df_one_long <- pivot_longer(df_one, 
                            cols = 3:5, 
                            names_to = "tissueType", 
                            values_to = "Expression") %>%
  # 清理组织名称的冗余后缀
  mutate(tissueType = gsub("_vars$", "", tissueType))

# 处理第二个数据框(修正错误)
df_two <- data.frame(
  corresponding_vars = c("var_x", "var_y", "var_z"),
  expression_organ_1_corresponding_vars = c(100, 320, 120),
  expression_organ_2_corresponding_vars = c(23, 30, 150),
  expression_organ_3_corresponding_vars = c(89, 7, 200)
)

df_two_long <- pivot_longer(df_two, 
                            cols = 2:4,  # 匹配df_two的数值列位置
                            names_to = "tissueType", 
                            values_to = "Expression") %>%
  rename(vars = corresponding_vars) %>%  # 统一变量列名
  mutate(tissueType = gsub("_corresponding_vars$", "", tissueType))

步骤2:合并数据并自定义变量顺序

合并两个长数据框后,手动定义成对的变量顺序,将其转为因子类型强制控制Y轴排列:

# 合并两个数据集
combined_df <- rbind(df_one_long, df_two_long)

# 定义想要的变量排列顺序:成对相邻
var_order <- c("var_a", "var_x", "var_b", "var_y", "var_c", "var_z")
combined_df$vars <- factor(combined_df$vars, levels = var_order)

步骤3:绘制合并热图

调整ggplot的映射(匹配目标图的轴布局),完成热图绘制:

ggplot(combined_df, aes(x = tissueType, y = vars, fill = Expression)) +
  geom_tile(color = "white", size = 1) +  # 添加白色边框区分单元格
  scale_fill_viridis_c(option = "plasma") +  # 可选:使用更美观的连续色阶
  labs(x = "组织类型", y = "变量", fill = "表达量") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

关键说明

  • 因子顺序是核心:ggplot默认按字母排序变量,只有将变量转为指定levels的因子,才能强制实现var_a与var_x这类对应变量的相邻排列。
  • 统一数据结构是前提:两个数据框必须拥有相同的列名,才能合并后用同一套代码绘制热图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:20:24