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

在ggplot中使用两个独立数据框时为折线添加图例名称

嗨,我来帮你搞定这个折线图的图例问题~

你之前的代码之所以没法给两条线命名生成图例,是因为你把color参数直接写在了geom_line()的外面,这属于手动固定颜色,ggplot不会把它识别成需要生成图例的映射变量,自然就不会显示图例啦。下面给你两种实用的解决办法:

方法1:合并数据框(推荐,更符合ggplot设计逻辑)

这种方式把两个年份的数据整合到一起,后续调整图表会更灵活:

  1. 先给每个数据框加上年份标识,再合并成一个数据框:
# 为两个数据框添加年份列
Hour_of_accident_15$year <- "2015"
Hour_of_accident_16$year <- "2016"

# 合并成一个长格式数据框
combined_accident_data <- rbind(Hour_of_accident_15, Hour_of_accident_16)
  1. 用合并后的数据绘图,把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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:39:48