在R中使用颜色显示值的热图样式ggplot

6tqwzwtp  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(112)

我试图创建一个类似于以下的情节:

也就是说,基于ggplot中的值(白色表示0)具有较深颜色的图。
我有一些花边

library(tidyverse)
library(ggplot2)

macs <- c(1,2,3,4,5,6)
KP <- c(4,5,0,7,8,2)
PF <- c(4,6,8,0,3,1)

df <- data.frame(macs,KP,PF)
rownames(df) <- c("PelTrawl","DemTrawl","KelpHarv","DemSeine","Rifles","Nets")

我想用它来创作情节。例如,我希望0的瓷砖为白色,而数字较大的瓷砖具有更高的不透明度(如图所示)。
我尝试使用热图或平铺ggplots,但我不太清楚在aes()中放什么。ie

ggplot() +
 geom_tile(df,aes(x = ?,y = ?, color = ?))

谢谢你

5w9g7ksd

5w9g7ksd1#

您需要将数据调整为适当的格式以进行打印。首先,使用rownames_to_column将行名转换为列。然后,你需要转向长格式。这意味着不是有三个变量,每个变量都包含数字,而是有两个变量:一个将测量标记为来自“macs”、“KP”或“PF”,另一个包含测量的值。你可以用pivot_longer来实现。这允许您将变量名称作为分类x轴,并将值作为填充颜色。
为了完整起见,您可以通过将列名和行名转换为因子来重新排列列名和行名,使其与在数据中出现的顺序相同。
剩下的只是主题。

df %>%
  rownames_to_column() %>%
  mutate(rowname = factor(rowname, rev(rowname))) %>%
  pivot_longer(-rowname, names_to = 'colname') %>%
  mutate(colname = factor(colname, c('macs', 'KP', 'PF'))) %>%
  ggplot(aes(colname, rowname, fill = value)) +
  geom_tile(color = 'black', linewidth = 0.5) +
  scale_fill_gradient(low = 'white', high = '#a020f0', guide = 'none') +
  labs(x = NULL, y = NULL) +
  coord_equal(expand = FALSE) +
  theme_bw(base_size = 16) +
  theme(axis.text = element_text(color = 'black'),
        axis.ticks.length.y = unit(5, 'mm'),
        axis.ticks.length.x = unit(0, 'mm'),
        axis.text.x.bottom = element_text(angle = 45, hjust = 1))

相关问题