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))
我想用x轴上的圈和y轴上的时间来绘制这些数据。我想使用geom_line()
并将图表按城市、等级和年份分组。所以,我应该有一条2019年/Paris/1-3,2019/Paris/4-6,2020/Paris/1-3,2020/Paris/4-6的线路。我不知道我怎么能用ggplot
做到这一点。任何帮助都将不胜感激!
发布于 2022-10-04 14:48:35
根据您的描述,听起来您需要将年份、城市和排名组合成一个新的变量。
library(tidyverse)
df <- 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)) %>%
mutate(value = paste(year, city, rank))
ggplot(df, aes(x = Laps, y = Timings, col = value)) +
geom_point() +
geom_line()
发布于 2022-10-04 15:30:08
对于一种有趣的方法(尽管我建议您使用最简单的答案),使用interaction
将允许按这三个变量进行分组,而无需修改发送给ggplot
函数的数据:
ggplot(df, aes(x = Laps, y = Timings, col = interaction(year, city, rank, sep = " "))) +
geom_point() +
geom_line() +
scale_colour_discrete("Cohort")
这只不过是对ggplot
的一种“纯粹主义”的方法--目的是让绘图函数在整洁的数据集中完成大部分工作!包括这里的利息。
轻微编辑-如果在sep = " "
调用中使用interaction
,则不需要重新格式化标签
https://stackoverflow.com/questions/73949639
复制相似问题