我想绘制一个有自然中点的东西,中点以下的许多值,以及中点以上的几个值。我想让中点以上的值突出。但由于它们非常接近中点(由于数据的分布),因此很难看到它们。
以下是一个例子:
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" )
我希望0到1之间的红色和0到-6之间的蓝色一样红。我怎么能这样做,同时保持我的秤连续?
或者离散化是唯一的选择吗?如果是这样,我可以保持部分比例连续,同时使其一部分离散吗?
答案 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))