【问题标题】:Plotting heatmap with large range with ggplot2使用 ggplot2 绘制大范围的热图
【发布时间】:2020-05-22 05:59:12
【问题描述】:

假设我有一个范围很大的数据

data = c(1:5, 30:40, 58, 200:210, 400)

我尝试使用 R 包“RColorBrewer”来绘制它,但值 1:5 几乎是白色。

如何绘制漂亮的热图?就像从 1:5 逐渐从白色变为绿色,然后 30:40 从蓝色变为紫色......等等但另一个问题是像 58 这样的单一值......

【问题讨论】:

  • 我想说 ggplot 和 RColorBrewer 都不可能知道你想如何重新调整这些值。因此,也许您可​​以根据需要简单地重新评估向量,然后使用新值绘制热图。

标签: r ggplot2 heatmap


【解决方案1】:

正如 cmets 中所指出的,您想要的调色板似乎不太可能完全自动化。但是,手动创建定制调色板并不难。

在下文中,我采用了一些 base R colour names 并使用内置函数 colorRampPalette 对它们进行了插值,并使用帮助器 f 进行了插值,只是为了方便。

通过这种方式,您可以创建任何您喜欢的调色板:

library(ggplot2)

data <- c(1:5, 30:40, 58, 200:210, 400)

f <- function(n, col1, col2 = NULL) colorRampPalette(c(col1, col2))(n)

colours <- c(
  f(5, "white", "cyan"),
  f(11, "blue", "purple"),
  f(1, "violet"),
  f(11, "pink", "red"),
  f(1, "black")
)

ggplot(NULL, aes(x = factor(data), y = 1, fill = factor(data))) +
  geom_tile() +
  scale_fill_manual(values = colours) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) # Just to fit reprex

reprex package (v0.3.0) 于 2020 年 5 月 22 日创建

显然,您必须使用实际的颜色值来获得看起来适合您的数据的东西。请注意,您不需要使用 R 定义的颜色名称。colorRampPalette(因此f)也采用十六进制颜色,例如,如果您特别喜欢其中一些颜色,您可以从ColorBrewer 获取.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2012-04-17
    • 2011-12-04
    相关资源
    最近更新 更多