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

如何为ggplot2中两个数据框的折线添加标签与图例?

解决ggplot2折线图添加颜色、标签和图例的问题

你当前的代码无法生成图例,核心原因是没有将分组信息(香港/伦敦)映射到aes()中的color参数,同时两个数据集的列名不统一也增加了操作复杂度。以下是两种可行的解决方案:

方案一:合并数据集(推荐,符合ggplot2最佳实践)

ggplot2基于「长格式数据」设计,合并数据集后通过变量映射自动生成图例,代码更简洁易维护:

library(ggplot2)
library(dplyr)

# 1. 处理两个数据集:统一列名+添加城市标识
hk_data <- hkviolentcrimeperpop %>%
  rename(year = violent_crime, cases = indecent_assault) %>%
  mutate(city = "Hong Kong")

london_data <- londonviolentcrimeperpop %>%
  rename(year = violentcrimes, cases = other_sexual_offences) %>%
  mutate(city = "London")

# 2. 合并为单个数据集
combined_data <- bind_rows(hk_data, london_data)

# 3. 绘制图表,通过color映射城市分组
potsexass <- ggplot(combined_data, aes(x = year, y = cases, color = city)) +
  geom_line() +
  geom_point() +
  scale_x_continuous(breaks = seq(2011, 2020, 1)) +
  labs(
    x = "Year",
    y = "Number of Cases",
    title = "Indecent or Sexual Assaults",
    color = "City" # 设置图例标题
  ) +
  theme(plot.title = element_text(size = 15)) # 修正标题大小的设置(原代码labs里的size参数无效)

print(potsexass)

方案二:不合并数据集,手动指定颜色映射

如果不想合并数据集,可在每个geom的aes()中显式指定分组名称,再通过scale_color_manual定义颜色和图例:

library(ggplot2)

potsexass <- ggplot() +
  # 香港数据:将color放入aes中,指定分组名称
  geom_line(data = hkviolentcrimeperpop, aes(x = violent_crime, y = indecent_assault, color = "Hong Kong")) +
  geom_point(data = hkviolentcrimeperpop, aes(x = violent_crime, y = indecent_assault, color = "Hong Kong")) +
  # 伦敦数据:同理指定分组名称
  geom_line(data = londonviolentcrimeperpop, aes(x = violentcrimes, y = other_sexual_offences, color = "London")) +
  geom_point(data = londonviolentcrimeperpop, aes(x = violentcrimes, y = other_sexual_offences, color = "London")) +
  scale_x_continuous(breaks = seq(2011, 2020, 1)) +
  scale_color_manual(
    name = "City", # 图例标题
    values = c("Hong Kong" = "#1f77b4", "London" = "#ff7f0e") # 自定义颜色,可替换为你需要的色值
  ) +
  labs(
    x = "Year",
    y = "Number of Cases",
    title = "Indecent or Sexual Assaults"
  ) +
  theme(plot.title = element_text(size = 15))

print(potsexass)

关键说明

  • 必须将color放在aes()内部,而非直接在geom_line(color="red")中设置——只有映射到变量的美学属性才会生成图例。
  • 原代码中labs(title=..., size=15)是错误用法,标题大小需要通过theme(plot.title = element_text(size=15))设置。

内容的提问来源于stack exchange,提问作者Zico Yuen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:27:34