我正在尝试使用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]红色的所有内容着色?
答案 0 :(得分:1)
我将创建一个scale_color_continuous
变量,而不是使用factor
来告诉这些点着色什么颜色并使用scale_color_discrete
或*_manual
。在此示例中,我们在aes
中使用条件,因此col
根据TRUE
的值接收FALSE
或yy
,但如果需要更多可能的值,您可以使用switch
或case_when
用可能的颜色类别填充yy_range
变量。
ggplot(fma) +
geom_point(aes( xx, yy, col = yy < 0)) +
scale_color_discrete(c('#0000ff','#ff0000'))
答案 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)
values参数仅接受0到1之间的值,这意味着-100等于0,而100等于1。
为了中性,我添加了白色,对应于〜0。可以通过将.495设置为.45并将.50设置为.55来进行扩展
还要注意,为了方便和易读起见,我正在为values参数创建一个不带小数的矢量,然后将其除以100,以重新缩放它,以便values参数可以使用它。