【发布时间】:2019-08-09 21:11:39
【问题描述】:
我想设置实现极端颜色的阈值,即给定从 color1 到 color2 的渐变和相应的变量 z,我想定义值 c_min 和 c_max 使得所有点z 的值大于c_max 的点有颜色2,所有z 的值低于c_min 的点都有颜色1。示例:
df <- data.frame(x=rnorm(10), y=rnorm(10), z=c(-100, rnorm(8), 100))
ggplot(df, aes(x=x, y=y, col=z)) + geom_point() +
scale_color_gradient2(low="blue", mid="white", high="red")
显然,这并不令人满意:大部分点都是白色的,只有极点才会有颜色。我更喜欢将渐变跨度在 -3 和 3 之间,并且这些值之外的所有内容都应该是蓝色或红色。
当然,我可以手动生成渐变并使用 scale_color_manual 设置点的颜色:
pal <- colorRampPalette(c("blue", "white", "red"))(17)
breaks <- seq(-3, 3, length.out=16)
cols <- pal[findInterval(df$z, breaks) + 1]
plot(df$x, df$y, pch=19, col=cols)
## or, in ggplot
ggplot(df, aes(x=x, y=y, col=factor(1:nrow(df)))) +
geom_point() + scale_color_manual(values=cols)
如何在 ggplot2 中做到这一点?最好不用手动计算梯度?
【问题讨论】: