各位大佬好,我想使用ggplot2的scale_fill_gradient2函数来根据所给的数值产生一系列颜色,我查看了scale_fill_gradient2的源码,看到这个函数调用了scales包的div_gradient_pal函数,于是我用div_gradient_pal函数生成,但我发现div_gradient_pal函数无法与我的数据的值所结合,它生成的只是一系列颜色。
1、直接使用scale_fill_gradient2
mydt <- data.frame(x=1:10,y=11:20,size=1:10)
p1 <- ggplot(data = mydt,aes(x=x,y=y,size=size,fill=size))+
geom_point(shape=21,show.legend = T)+
scale_fill_gradient2(low = "grey",high = "red")
p1
2、使用div_gradient_pal获取颜色
mycol <- (div_gradient_pal(low ="grey","red")(seq(0, 1, length = 10)))
mydt$col <- mycol
p2 <- ggplot(data = mydt,aes(x=x,y=y,size=size,fill=I(col)))+
geom_point(shape=21,show.legend = T)
p2
上面两个代码得到的图颜色差别比加大,后者的图颜色要暗淡一些。我用了(ggplot_build(p1)$data)[[1]]
查看了p1的颜色,与mycol的内容相差很大,请问如何使用scale_fill_gradient2函数根据自己的数据来获取颜色呢?比较笨拙的办法是先绘制图(如p1),然后使用ggplot_build来提取,但我感觉这样绕弯路了。我从网上的链接找到了一个做法,但这个代码得到的是breaks的颜色,不是全部的数据的颜色,还请各位大佬指教,谢谢。以下是得到breaks的颜色的代码:
scale <- scale_colour_continuous()
scale$train(range(mydt$size))
breaks <- scale$get_breaks()
colours <- scale$map(breaks)
data.frame(breaks = breaks, colours = colours)