当填充也用于 ggplot2 的美学时,有没有办法控制颜色图例的填充?
前任。
dat<-data.frame(id=as.character(1:4), var1=rep(LETTERS[1:2], 2), var2=rep(LETTERS[3:4], 2))
dat
library(ggplot2)
ggplot(dat)+
geom_bar(aes(id, color=var1, fill=var2))+
scale_color_manual(values=c("A"="black", "B"="grey"))+
theme_light()
Run Code Online (Sandbox Code Playgroud)
在这个图例中,很难看到颜色图例中深灰色填充周围的浅灰色边框。我承认指定颜色并在同一个图中填充可能不是一个好习惯,因为很难理解哪种颜色意味着什么,并且填充对象周围的彩色边框很难区分,但我该怎么做如果我想?
通过在图中手动指定填充,可以在未指定填充时控制图例中的填充颜色。
ggplot(dat)+
geom_bar(aes(id, color=var1), fill="white")+
theme_light()
Run Code Online (Sandbox Code Playgroud)
我认为有一种方法可以使用主题中的参数来控制它,但是可以theme(legend.background=element_rect())控制整个图例的背景(这是正确的)
ggplot(dat)+
geom_bar(aes(id, color=var1, fill=var2))+
scale_color_manual(values=c("A"="black", "B"="grey"))+
theme_light()+
theme(legend.background = element_rect(fill="blue"))
Run Code Online (Sandbox Code Playgroud)
同样在主题中,theme(legend.key = element_rect(fill="blue"))仅var2在图例中的框周围添加一条细蓝线,legend.box控制多个图例的排列(“水平”或“垂直”),并theme(legend.box.background = element_rect(fill="blue"))为图例var1和var2图例之间的背景着色。
我认为图例可能使用 NA 的默认值进行填充,所以我尝试使用手动指定它 scale_color_discrete()
ggplot(dat)+
geom_bar(aes(id, color=var1, fill=var2))+
scale_color_manual(values=c("A"="black", "B"="grey",
na.translate=TRUE, na.value = "white"))+
theme_light()
Run Code Online (Sandbox Code Playgroud)
看起来和第一个情节一样。
这似乎应该由theme()or 中的参数控制scale_color_manual,但我似乎无法弄清楚。
干杯
Mar*_*ius 10
对于传说中数据相关的方面,theme()不会帮你的。相反,您需要使用guides并覆盖颜色图例的填充:
ggplot(dat)+
geom_bar(aes(id, color=var1, fill=var2))+
scale_color_manual(values=c("A"="black", "B"="grey"))+
guides(color = guide_legend(override.aes = list(fill = "white"))) +
theme_light()
Run Code Online (Sandbox Code Playgroud)
一般规则是theme()只控制绘图的整体外观,而不是像比例这样的数据相关部分(也许不是“数据相关”,它应该是“根据数据变化的绘图部分”)。