ggplot绘制双折线图无报错但图例不显示的问题求助
ggplot双折线图图例不显示问题解决方案
问题根源
ggplot的图例是基于aes()内的属性映射自动生成的,你当前把color参数写在了aes()外部,属于对单条折线的固定样式赋值,没有和分类变量做绑定,因此不会触发生成图例。
修正方案
方法1:转换为长表(ggplot官方推荐的规范写法)
先将宽格式数据转换为长格式,把两个统计指标作为分类变量映射到color属性,代码如下:
avgFSize1<-c(2,4,5,6,7,8,9,10,11) avgHSize1<-c(4,5,7,9,10,12,13,15,17) year1<-c(2010,2011,2012,2013,2014,2015,2016,2017,2018) singleh<-c(101,102,103,105,106,107,111,113,118) library(dplyr) library(tidyr) library(ggplot2) testitem <- data.frame(avgFSize1, avgHSize1, year1, singleh) # 宽表转长表,仅保留绘图需要的字段 testitem_long <- testitem %>% select(year1, avgFSize1, avgHSize1) %>% pivot_longer(cols = -year1, names_to = "指标类型", values_to = "数值") chart26<-testitem_long %>% ggplot(aes(x=year1, y=数值, color=指标类型))+ geom_line()+ # 手动匹配颜色和图例显示名称 scale_color_manual(values = c("avgHSize1" = "black", "avgFSize1" = "red"), labels = c("AvgHSize", "AvgFSize")) + theme(legend.position="bottom", legend.box = "horizontal")+ ggtitle("平均家庭与住户规模")+ labs(y="平均家庭与住户规模", color = NULL) # 设置color为NULL隐藏图例标题 chart26
方法2:不修改原数据结构快速修复
如果不需要调整原数据结构,可直接将color参数移入aes()内,手动绑定分类标签即可:
avgFSize1<-c(2,4,5,6,7,8,9,10,11) avgHSize1<-c(4,5,7,9,10,12,13,15,17) year1<-c(2010,2011,2012,2013,2014,2015,2016,2017,2018) singleh<-c(101,102,103,105,106,107,111,113,118) library(dplyr) library(ggplot2) testitem <- data.frame(avgFSize1, avgHSize1, year1, singleh) chart26<-testitem%>%ggplot(aes(x=year1))+ geom_line(aes(y=avgHSize1, color = "AvgHSize"))+ geom_line(aes(y=avgFSize1, color = "AvgFSize"))+ # 手动匹配分类标签对应的颜色 scale_color_manual(values = c("AvgHSize" = "black", "AvgFSize" = "red")) + theme(legend.position="bottom", legend.box = "horizontal")+ ggtitle("平均家庭与住户规模")+ labs(y="平均家庭与住户规模", color = NULL) chart26
内容的提问来源于stack exchange,提问作者Tim Wilcox
相关产品推荐
相关产品推荐

