【问题标题】:Create single ggplot gradient color scheme with a discontinuous function使用不连续函数创建单个 ggplot 渐变配色方案
【发布时间】:2021-06-18 13:26:01
【问题描述】:

这有点远,但我想知道是否有人曾尝试将两个不同的连续渐变比例组合成一个比例(基本上是将两个不同的连续函数组合成一个函数)以在 ggplot 中进行渐变填充?让我试着用一个例子来解释:

x <- rep(1:10, each = 10)
y <- rep(1:10, 10)
fill <- sample(1:60, 100, replace = TRUE)

df_test <- as.data.frame(cbind(x, y, fill))

ggplot()+
  geom_tile(data = df_test, aes(x = x, y = y, fill = fill))+
  scale_fill_gradient2(low = "red",
                       mid = "white",
                       high = "blue",
                       midpoint = 30)

代码将在下面生成一个图,其中颜色将从 30 偏离为高值和低值设置的相应颜色(在本例中为蓝色和红色)。

但是,如果出于某种原因,我想将中点设置为 50 而不是 30,则代码和绘图将如下所示:

ggplot()+
  geom_tile(data = df_test, aes(x = x, y = y, fill = fill))+
  scale_fill_gradient2(low = "red",
                       mid = "white",
                       high = "blue",
                       midpoint = 50)

正如您在此处看到的那样,尽管我仍然将蓝色指定为渐变高点的颜色,但由于我的中点现在是 50,因此蓝色比以前更加柔和。看起来scale_gradient2 只是重新调整了颜色,使 0 仍然是红色,但由于中点现在是 50,所以高点颜色是较浅的蓝色。

我想要的行为是我为 high 设置的颜色保持在第一个图中的颜色,我意识到我想基本上将 两个 不同的比例组合在一起以获得一个渐变比例, 如果值在 50 到 0 之间,那么它是从白色到红色的红色渐变,如果值在 50 到 60 之间,那么它是从白色到蓝色的蓝色渐变。我曾考虑使用自定义转换添加自定义填充变量,但这并没有真正奏效。有人会有更优雅/更有效的解决方案吗?

【问题讨论】:

标签: r ggplot2 colors gradient


【解决方案1】:

创建您自己的调色板。

library(RColorBrewer)
reds=colorRampPalette(c("red", "white"))
blues=colorRampPalette(c("white", "blue"))

ggplot()+
  geom_tile(data = df_test, aes(x = x, y = y, fill = fill))+
  scale_fill_gradientn(colors=c(reds(50), blues(10)))

【讨论】:

  • 这比尝试自定义转换我的填充变量以匹配所需的行为要简单得多,谢谢您的回答!
猜你喜欢
  • 2019-08-22
  • 2012-07-04
  • 2019-04-21
  • 2022-09-23
  • 1970-01-01
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多