You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 19:03:03