如何让ggplot颜色条在中点附近不对称地变化?

时间:2018-03-19 17:50:29

标签: r ggplot2

我想绘制一个有自然中点的东西,中点以下的许多值,以及中点以上的几个值。我想让中点以上的值突出。但由于它们非常接近中点(由于数据的分布),因此很难看到它们。

以下是一个例子:

library(ggplot2)
mtcars$qsec <- mtcars$qsec-21
sp2<-ggplot(mtcars, aes(x=wt, y=mpg, color=qsec)) + geom_point()
sp2+scale_color_gradient2(midpoint=0, low="blue", mid="white",
                          high="red", space ="Lab" )

enter image description here

我希望0到1之间的红色和0到-6之间的蓝色一样红。我怎么能这样做,同时保持我的秤连续?

或者离散化是唯一的选择吗?如果是这样,我可以保持部分比例连续,同时使其一部分离散吗?

1 个答案:

答案 0 :(得分:1)

根据Henrik的建议,to_n <- 11 for(i in 2:to_n){ prev_x_name <- paste0('x', i-1) prev_y_name <- paste0('y', i-1) x_name <- paste0('x', i) y_name <- paste0('y', i) df[x_name] <- df[prev_x_name] + df[prev_y_name] df[y_name] <- df[prev_y_name] + 1 } # x1 y1 x2 y2 x3 y3 x4 y4 ... # 1 1 1 2 2 4 3 7 4 ... # 2 2 1 3 2 5 3 8 4 ... # 3 3 1 4 2 6 3 9 4 ... 完成了这项工作。需要进行的额外计算是计算1为最高值且0为最低值时的中点,可以使用scale_color_gradientn来完成。

(midpoint-min(mtcars$qsec))/(max(mtcars$qsec)-min(mtcars$qsec))