我正在尝试用两种不同颜色创建带有点(实际上是条形,但无论如何)的图片,这些颜色具有平行的饱和到不饱和色标,以及相应的颜色条图例。我大部分时间都在那里,但还有一些我无法处理的小问题。
tl; dr 我从红色到白色渐变得到的色标和饱和红色到完全不饱和的渐变不相同。
设置数据:y
将确定y轴位置和饱和度,w
将确定二元颜色选择。
set.seed(101)
dd <- data.frame(x=1:100,y=rnorm(100))
dd$w <- as.logical(sample(0:1,size=nrow(dd),
replace=TRUE))
获取套餐:
library(ggplot2)
library(cowplot)
library(gridExtra)
我可以通过允许alpha(透明度)随y
变化来获得我想要的情节,但传说很难看:
g0 <- ggplot(dd,aes(x,y))+
geom_point(size=8,aes(alpha=y,colour=w))+
scale_colour_manual(values=c("red","blue"))
## + scale_alpha(guide="colourbar") ## doesn't work
我可以自己绘制每一半的点数,以获得类似于我想要的传奇:
g1 <- ggplot(dd[!dd$w,],aes(x,y))+
geom_point(size=8,aes(colour=y))+
scale_colour_gradient(low="white",high="red",name="not w")+
expand_limits(x=range(dd$x),y=range(dd$y))
g2 <- ggplot(dd[dd$w,],aes(x,y))+
geom_point(size=8,aes(colour=y))+
scale_colour_gradient(low="white",high="blue",name="w")+
expand_limits(x=range(dd$x),y=range(dd$y))
现在我可以使用cowplot
中的工具来挑选传说并将它们与原始情节结合起来:
g1_leg <- get_legend(g1)
g2_leg <- get_legend(g2)
g0_noleg <- g0 + theme(legend.position='none')
ggdraw(plot_grid(g0_noleg,g1_leg,g2_leg,nrow=1,rel_widths=c(1,0.2,0.2)))
这是大部分的方式,但是:
想法?或实现同一目标的其他方式?