当使用带有黑色背景的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颜色,但这是浪费墨水和丑陋。
答案 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)