ggplot2如何隐藏图表图例?移除图例名称时出现重复图例怎么办?
解决ggplot2中隐藏图例名称却出现两个图例的问题
我明白你遇到的困扰了——你同时用col和size两个美学属性映射了variavel变量,只在labs()里设置col = ""只会移除颜色图例的标题,但尺寸图例的默认标题variavel还保留着,所以ggplot会把两个图例分开显示,就出现了双图例的情况。
要解决这个问题,核心是同时处理两个美学映射的图例标题,下面提供两种简单的方案:
方案1:在labs()中同时设置col和size为空字符串
既然两个图例都基于同一个变量,我们可以直接在labs()里把col和size的标题都设为空,ggplot会自动将它们合并成一个图例:
dados_wide %>% filter(variavel %in% c("mm30d","mm7d")) %>% ggplot(aes(x = data, y = value, col = variavel, size = variavel)) + geom_rect(aes(xmin = as.Date("2020-03-20"), xmax = as.Date(Sys.Date()), ymin = -Inf, ymax = +Inf), fill="#ffe6e6", alpha = 0.07, color = NA) + geom_line() + geom_hline(yintercept = 100) + scale_x_date(date_labels = "%b-%Y") + scale_color_manual(values=c('#B0ADAD','#454545')) + scale_size_manual(values = c(0.4, 0.8)) + labs( x = "", y = "", col = "", # 隐藏颜色图例标题 size = "", # 隐藏尺寸图例标题 title = "Consumo de Energia Elétrica - Consumidores Livres", subtitle = "Base 100 = Média Primeira Semana de Fev/2020" ) + facet_wrap( ~ atividade, scales = "free_y", nrow = 4) + theme( panel.grid.major = element_line(colour = "gray85", size = 0.3), panel.grid.minor = element_line(linetype = "blank"), panel.background = element_rect(fill = NA, colour = "gray45", size = 0.3, linetype = "solid"), legend.position = "bottom" )
方案2:用guides()统一控制图例标题
如果你想更清晰地管理图例,也可以用guides()函数单独设置每个图例的标题为NULL,效果和方案1一致:
# 在你的代码末尾添加这一行即可 guides( col = guide_legend(title = NULL), size = guide_legend(title = NULL) )
为什么原来的方法会失效?
ggplot2中,每个独立的美学映射(比如col、size)都会生成对应的图例,只有当这些图例的标题完全一致时,ggplot才会自动合并它们。你之前只修改了col的标题,size的标题还是默认的variavel,所以两个图例被分开渲染了。
内容的提问来源于stack exchange,提问作者Alexandre Sanches
相关产品推荐
相关产品推荐

