如何使用scale_color_gradient2()缩小中间区域,同时保留中点

pn9klfpd  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(124)

我可以使用scale_color_gradient2()在密度图中创建渐变填充。**我想缩小中间的白色区域。**例如,让红色和蓝色在x值为0.5时达到完全饱和。如何做到这一点?

set.seed(123)
x <- rnorm(100)
y <- density(x, n = 2^12)
mydf <- data.frame(x = y$x, y = y$y)

ggplot(mydf, aes(x, y)) + geom_line() + 
    geom_segment(
        aes(xend = x, yend = 0, color = x)
        ) + 
    scale_color_gradient2(
        low = "red", 
        mid = "white", 
        high = "blue", 
        midpoint = 0
      )

字符串


的数据
我可以通过scale_color_denistyn()得到非常接近我想要的结果,但是我失去了指定中点的能力

ggplot(mydf, aes(x, y)) + geom_line() + 
    geom_segment(
        aes(xend = x, yend = 0, color = x)
        ) + 
    scale_color_gradientn(
        colors = c(rep("red", 5), "white", rep("blue", 5))
        # midpoint = 0
      )

ruyhziif

ruyhziif1#

您可以使用scale_color_gradientnvalues参数来精确控制颜色更改的位置,沿着使用rescale

ggplot(mydf, aes(x, y)) + geom_line() + 
  geom_segment(
    aes(xend = x, yend = 0, color = x)
  ) + 
  scale_color_gradientn(
    colors = c('red', 'red', 'white', 'blue', 'blue'),
    values = scales::rescale(c(min(mydf$x), -0.5, 0, 0.5, max(mydf$x)), 0:1)
  )

字符串


的数据

相关问题