使用ggplot2绘制大范围的热图

Plotting heatmap with large range with ggplot2

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

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

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

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

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

在下文中,我采用了一些 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-05-22 创建

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