在ggplot中使用两个独立数据框时为折线添加图例名称
嗨,我来帮你搞定这个折线图的图例问题~
你之前的代码之所以没法给两条线命名生成图例,是因为你把color参数直接写在了geom_line()的外面,这属于手动固定颜色,ggplot不会把它识别成需要生成图例的映射变量,自然就不会显示图例啦。下面给你两种实用的解决办法:
方法1:合并数据框(推荐,更符合ggplot设计逻辑)
这种方式把两个年份的数据整合到一起,后续调整图表会更灵活:
- 先给每个数据框加上年份标识,再合并成一个数据框:
# 为两个数据框添加年份列 Hour_of_accident_15$year <- "2015" Hour_of_accident_16$year <- "2016" # 合并成一个长格式数据框 combined_accident_data <- rbind(Hour_of_accident_15, Hour_of_accident_16)
- 用合并后的数据绘图,把
year映射到color上,再手动指定对应颜色:
ggplot(combined_accident_data, aes(x = hour_of_crash, y = n, color = year)) + geom_line() + # 手动指定年份对应的颜色 scale_color_manual(values = c("2015" = "green", "2016" = "red")) + theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 15)) + # 简化x轴标签的写法,效果和你原来的一样 scale_x_discrete(limits = 0:24, labels = paste(1:24)) + labs(x = "Hours", y = "Number of car accident", title = "Number of fatal car accident per hour")
方法2:不合并数据,直接在aes内定义color
如果你不想调整数据结构,也可以在每个geom_line的aes里设置color,让ggplot识别这是需要生成图例的变量,再手动配置标签和颜色:
ggplot() + geom_line(data = Hour_of_accident_15, aes(x = hour_of_crash, y = n, color = "2015")) + geom_line(data = Hour_of_accident_16, aes(x = hour_of_crash, y = n, color = "2016")) + # 绑定颜色和对应的年份名称 scale_color_manual(values = c("2015" = "green", "2016" = "red")) + theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 15)) + scale_x_discrete(limits = 0:24, labels = paste(1:24)) + labs(x = "Hours", y = "Number of car accident", title = "Number of fatal car accident per hour", color = "Year")
这里把color放到aes内部后,ggplot会自动生成图例,你还可以通过labs里的color参数修改图例的标题哦~
内容的提问来源于stack exchange,提问作者Charlotte
相关产品推荐
相关产品推荐

