如何用ggplot基于city、rank、year三组数据绘制折线图?
用ggplot按多维度分组绘制折线图
首先确保加载ggplot2包:
library(ggplot2)
你的原始数据如下:
gfg_data <- data.frame(year = c(2019, 2019, 2019, 2020, 2020, 2020, 2019, 2019, 2019, 2020, 2020, 2020), city = c('Paris', 'Paris', 'Paris', 'Paris', 'Paris', 'Paris', 'Baku', 'Baku', 'Baku', 'Baku', 'Baku', 'Baku'), rank = c('1-3', '1-3', '1-3', '4-6', '4-6', '4-6', '1-3', '1-3', '1-3', '4-6', '4-6', '4-6'), Timings = c(5, 6, 4, 2, 3, 4, 11, 13, 15, 14, 17, 12), Laps = c(1,2,3,1,2,3,1,2,3,1,2,3))
解决方案:合并多维度为分组标识
要实现按year、city、rank三个维度的每个组合绘制独立折线,核心是让ggplot识别每个唯一组合为单独分组,有两种简洁方式:
方式1:直接用interaction()生成分组
在aes()中通过interaction(year, city, rank)自动生成三个变量的唯一组合作为分组,同时用颜色和线型区分不同组:
ggplot(gfg_data, aes(x = Laps, y = Timings, group = interaction(year, city, rank), color = interaction(year, city, rank), linetype = interaction(year, city, rank))) + geom_line(linewidth = 1) + # 可选:调整折线粗细 labs(title = "圈速随圈数变化(按年份/城市/排名分组)", x = "圈数", y = "用时", color = "分组", linetype = "分组") + theme_minimal()
方式2:手动创建友好分组标签
如果希望分组显示为2019/Paris/1-3这种直观格式,可以先给数据添加新列,再用于分组:
# 创建分组标签列 gfg_data$group <- paste(gfg_data$year, gfg_data$city, gfg_data$rank, sep = "/") # 绘图 ggplot(gfg_data, aes(x = Laps, y = Timings, group = group, color = group, linetype = group)) + geom_line(linewidth = 1) + labs(title = "圈速随圈数变化(按年份/城市/排名分组)", x = "圈数", y = "用时", color = "分组", linetype = "分组") + theme_minimal()
说明
group参数是ggplot识别折线分组的关键,确保每个year/city/rank组合对应一条独立折线color和linetype参数用于可视化区分不同组,便于快速识别- 可根据需求调整
theme、linewidth、标签文字等细节
内容的提问来源于stack exchange,提问作者EV_Mustang
相关产品推荐
相关产品推荐

