7

当使用带有黑色背景的 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")

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

在此处输入图像描述

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

4

2 回答 2

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 颜色。

于 2012-12-30T20:03:06.583 回答
1

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

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

geom_point(colour="white",size=1) + 
geom_point(colour="black",size=3,show_guide=FALSE) +
geom_point(show_guide=FALSE)
于 2012-12-22T03:33:12.610 回答