如何为热图的每组 2 列制作标签?

问题描述 投票:0回答:1

我正在尝试在 RStudio 中创建一个热图,以显示不同微生物物种与环境变量之间的相关性,每个环境变量都有两列,即组织和粘液。

我设置了组织和粘液柱,但我似乎无法为每组组织和粘液柱设置标签。 这就是它目前的样子。

标签错位的热图:

这是我目前使用的代码:

library(ggplot2)
library(dplyr)
library(cowplot)

dfmerge <- data

dfmerge$interaction <- with(dfmerge, interaction(Env, Type, sep = " - "))
dfmerge$interaction <- factor(dfmerge$interaction, levels = sort(levels(dfmerge$interaction)))


heatmap_plot <- ggplot(dfmerge, aes(x = interaction, y = Taxa, fill = Correlation)) +
  geom_tile() +
  scale_fill_gradient2(low = "blue", mid = "white", high = "red") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) +
  labs(x = "", y = "Observations", title = "Heatmap") +
  scale_x_discrete(labels = function(x) gsub("^[^-]* - ", "", x), expand = c(0.05, 0))

num_envs <- length(unique(dfmerge$Env))
label_width <- 1 / num_envs

env_labels_df <- dfmerge %>%
  distinct(Env) %>%
  mutate(xpos = (1:length(Env)) * 2 - 1)

env_labels <- ggplot(env_labels_df, aes(x = xpos, y = 1, label = Env)) +
  geom_label(fill = "lightgrey", size = 5, label.padding = unit(0.25, "lines"), label.size = label_width) +
  theme_void() +
  theme(plot.margin = margin(t = 0, r = 0, b = 0, l = 0)) +
  coord_cartesian(xlim = c(0.5, num_envs * 2 - 0.5), clip = "off")

heatmap_with_labels <- cowplot::plot_grid(env_labels, heatmap_plot, nrow = 2, rel_heights = c(0.1, 1), align = "h", axis = "tb")

print(heatmap_with_labels)

这就是我要效仿的:

[heatmap courtesy of "Microbiome dynamics in the tissue and mucus of acroporid different relation to host and environmental parameters":

对于那些想知道的人,我必须为它重写代码,不能只使用论文中的图像。

任何帮助将不胜感激

r heatmap correlation
1个回答
0
投票

如果您要“手动”重新创建情节,我认为您需要进行一些重大更改,例如这是使用内置“ChickWeights”数据集的更接近的近似值:

library(tidyverse)
library(RColorBrewer)

data("ChickWeight")

palette <- brewer.pal(n = 5, name = "RdBu")

ChickWeight %>%
  mutate(norm = rnorm(n = n(), mean = 200, sd = 50)) %>%
  filter(Time %in% 6:20,
         Chick %in% 30:50) %>%
  pivot_longer(cols = c(weight, norm)) %>%
  mutate(Correlation = 1 - (value / max(value)) - 0.5) %>% 
  ggplot(aes(x = name, y = Chick, fill = Correlation)) +
  geom_tile() +
  theme_classic(base_size = 16) +
  theme(axis.text.x = element_text(angle = 270, hjust = 0, vjust = 0.5),
        axis.title.x = element_blank()) +
  facet_wrap(~Time, nrow = 1) +
  scale_fill_gradientn(colors = palette) +
  coord_fixed()

创建于 2023-05-03 与 reprex v2.0.2

或者,这个数字可能是由作者使用一个包创建的,例如corrplot(或类似的东西),因此可能值得阅读本文的方法部分和/或在谷歌上搜索类似的热图数据。希望这有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.