在ggplot2中设置scale_colour_gradientn的值

时间:2018-08-17 19:31:45

标签: r ggplot2

我正在尝试使用scale_colour_gradientn清楚显示负值与pos值:负数是蓝色,正数是红色。但是,gradientn似乎忽略了我的颜色矢量,只创建了一个大渐变而不是n个小渐变。这是我的示例代码...

xx <- -100:100
yy <- xx
fma <- data.frame( xx, yy)
ggplot( fma) +
  geom_point( aes( xx, yy, col=yy)) +
  scale_colour_gradientn(
    colours=c('#0000ff','#0000ff','#ff0000','#ff0000'),
    values=c(  -100,       -1,      1,      100))

我该如何说服渐变色将[-100,-1]蓝色的所有内容和[1,100]红色的所有内容着色?

2 个答案:

答案 0 :(得分:1)

我将创建一个scale_color_continuous变量,而不是使用factor来告诉这些点着色什么颜色并使用scale_color_discrete*_manual。在此示例中,我们在aes中使用条件,因此col根据TRUE的值接收FALSEyy,但如果需要更多可能的值,您可以使用switchcase_when用可能的颜色类别填充yy_range变量。

ggplot(fma) +
    geom_point(aes( xx, yy, col = yy < 0)) +
    scale_color_discrete(c('#0000ff','#ff0000'))

enter image description here

答案 1 :(得分:0)

如果您希望将色标保持为渐变色,而不是二色标,则可以执行以下操作:

xx <- -100:100
yy <- xx
fma <- data.frame( xx, yy)
ggplot( fma) +
  geom_point( aes( xx, yy, col=yy)) +
  scale_colour_gradientn(
    colours=c('indianred4','indianred1','white','darkseagreen1','darkseagreen4'),
    values=c(  0,       49.5,  50,    50.5,      100)/100)

enter image description here

values参数仅接受0到1之间的值,这意味着-100等于0,而100等于1。

为了中性,我添加了白色,对应于〜0。可以通过将.495设置为.45并将.50设置为.55来进行扩展

还要注意,为了方便和易读起见,我正在为values参数创建一个不带小数的矢量,然后将其除以100,以重新缩放它,以便values参数可以使用它。