控制ggplot中不是颜色指南的图例元素的颜色

时间:2012-12-22 01:00:13

标签: r ggplot2

当使用带有黑色背景的ggplot2主题时,是否可以控制颜色指南以外的指南的图例颜色,以便不用黑色绘制内容?如果是这样,怎么样?

library(ggplot2) # needs to be 0.9.3 for this theme
data(iris)       # included with ggplot2

theme_black<- function (base_size = 16, base_family = ""){
    theme_minimal() %+replace% 
        theme(
              line = element_line(colour = "white", size = 0.5, linetype = 1, 
                        lineend = "butt"), 
              rect = element_rect(fill = "white", 
                        colour = "white", size = 0.5, linetype = 1), 
              text = element_text(family = base_family, 
                        face = "plain", colour = "white", size = base_size,
                        angle = 0, lineheight = 0.9, hjust = 0, vjust = 0),
              plot.background = element_rect(colour = 'black', fill = 'black'),
              plot.title = element_text(size = rel(1.2)),
              panel.border = element_rect(fill = NA, colour = "white"), 
              panel.grid.major = element_line(colour = "grey20", size = 0.2), 
              panel.grid.minor = element_line(colour = "grey5", size = 0.5),
              strip.background = element_rect(fill = "grey30", colour = "grey30")
             )
    }

ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width, shape=Species,
       colour=Petal.Length))+geom_point()+theme_black()+
       scale_colour_gradient(low = "purple", high = "white")

正如您所看到的,图例形状部分的默认颜色尚未更改,因此它是不可见的,无法分辨哪个是哪个物种:

enter image description here

我现在唯一的解决方案是更改legend.background颜色,但这是浪费墨水和丑陋。

2 个答案:

答案 0 :(得分:2)

简短的回答似乎是没有完美的方法来做到这一点。

我们可以根据@ user1317221_G的答案添加带有形状指南的隐藏图层,我接受了。但它是额外的计算,如果我们保存为pdf,我希望这些隐藏的层将存在。

或者,我们可以覆盖形状指南的颜色,正如@bdemarest在评论中建议的那样:

+ guides(shape=guide_legend(override.aes=list(colour="white"))

但这仍然迫使我们在+ theme_black()

之外添加特定于主题的代码

我已经实现了稍微复杂一点的版本因为我为会话设置了默认主题,具体取决于我是在制作纸张(灰色/白色背景)还是屏幕(黑色背景)。所以我的方法是在会话早期按照这些方式运行:

 set_theme(theme_black); defaultcol = "white" # for slides
 # or
 set_theme(theme_bw); defaultcol = "black"    # for paper

后跟一个包含以下内容的ggplot():

+ guides(shape=guide_legend(override.aes=list(colour=defaultcol))

这样做的好处是可以最大限度地减少对主题特定主题调整的需求,尽管它不如能够使用主题控制默认的ggplot2颜色。

答案 1 :(得分:1)

一种方法是添加两个额外的geom_point,逻辑将是:

绘制图例的白点,用没有图例的黑点覆盖它们,然后绘制没有图例的彩色点,例如

geom_point(colour="white",size=1) + 
geom_point(colour="black",size=3,show_guide=FALSE) +
geom_point(show_guide=FALSE)