使用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 中获取,如果你特别喜欢其中的一些。
假设我有一个范围很大的数据
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 中获取,如果你特别喜欢其中的一些。