使用ggplot和cowplot调整自定义图例:颜色匹配问题

时间:2017-05-31 11:55:26

标签: r plot ggplot2 colors

我正在尝试用两种不同颜色创建带有点(实际上是条形,但无论如何)的图片,这些颜色具有平行的饱和到不饱和色标,以及相应的颜色条图例。我大部分时间都在那里,但还有一些我无法处理的小问题。

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))

enter image description here

现在我可以使用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)))

enter image description here

这是大部分的方式,但是:

  • 理想情况下,我想将两个颜色压缩在一起(我知道我可以通过足够的网格黑客来做到这一点......)
  • 颜色不太匹配;图例颜色比点颜色稍暖......

想法?或实现同一目标的其他方式?

0 个答案:

没有答案