【问题标题】:Creating heatmap from hex code color table in R从 R 中的十六进制代码颜色表创建热图
【发布时间】:2021-04-06 03:54:08
【问题描述】:

我有一个十六进制代码颜色表(“my_table”),如下:

   V1     V2

1 #010000 #080000

2 #140004 #000000

3 #000000 #080000

4 #040000 #110000

5 #050000 #080004

6 #030000 #030000

7 #090000 #0B0000

8 #3A0010 #2D000D

9 #000000 #000000

我想在 R 中绘制热图,在我的图中显示这些颜色。我试过了:

grid.raster(my_table, interpolate=FALSE)

它有效,但我也希望热图有标签、图例等,所以我想我会使用一个有更多选项的函数,比如 ggplot 来绘制我的热图。我找不到任何方法可以用 ggplot 将此十六进制代码矩阵绘制为颜色,有人知道解决方案吗?

【问题讨论】:

标签: r ggplot2 heatmap rgb raster


【解决方案1】:

要将数据框的某种“文字转录”转换为热图,您可以使用scale_fill_identity。您的颜色有点暗,难以辨认,但绘制数据看起来像这样:

library(ggplot2)
library(dplyr)
library(tidyr)

my_table %>%
  tibble::rownames_to_column() %>%
  mutate(rowname = as.numeric(rowname)) %>%
  pivot_longer(-1) %>%
  ggplot(aes(x = name, y = rowname, fill = value)) +
  geom_tile(color = "gray50") +
  scale_fill_identity() +
  scale_x_discrete(position = "top") +
  scale_y_reverse(breaks = seq(nrow(my_table))) +
  coord_equal()

您说您想要一个图例,但不清楚图例实际显示的内容,因为这些值是实际颜色,并且将十六进制字符串映射到图例中的颜色似乎没什么意义。当然,除非您的数据结构实际上比您问题中的数据结构复杂一些。


数据

my_table <- structure(list(V1 = c("#010000", "#140004", "#000000", "#040000", 
"#050000", "#030000", "#090000", "#3A0010", "#000000"), V2 = c("#080000", 
"#000000", "#080000", "#110000", "#080004", "#030000", "#0B0000", 
"#2D000D", "#000000")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9"))

【讨论】:

  • 很好的答案!我自己在尝试一些东西,但我没想过使用新的row.names 列。学到了新东西,谢谢:)
  • 虽然是一个问题,但定义为class = data.frame而不是直接使用my_table &lt;- data.frame( v1 = c(....), v2 = c(...))等等的目的是什么?
  • @Aman 这是dput(my_table) 的输出,它允许使用完全可重现的数据示例。这是版本无关的(所以不需要stringsAsFactors = )。您可以使用my_table &lt;- read.table(text = readClipboard(), header = TRUE) 读取问题中的示例数据,而不是写出生成数据框的调用,然后dput(my_table) 发出调用,只需在控制台中复制和粘贴即可重新生成相同的对象。跨度>
  • 非常感谢您的回答!这正是我一直在寻找的,它对我来说非常有效。
猜你喜欢
  • 2017-10-01
  • 2022-01-04
  • 2011-10-25
  • 2011-09-20
  • 1970-01-01
  • 2019-11-28
  • 2011-01-28
  • 2017-05-03
  • 2014-05-02
相关资源
最近更新 更多