r - ggplot 与 aes(group = ...) 问题
问题描述
使用我的简单数据框
> str(dta)
Classes 'tbl_df', 'tbl' and 'data.frame': 54 obs. of 4 variables:
$ year : num 2016 2016 2017 2017 2018 ...
$ severef: num 0.112 0.465 0.11 0.457 0.114 ...
$ package: Factor w/ 3 levels "Baseline","HSS",..: 1 1 1 1 1 1 1 1 1 1 ...
$ run_nb : int 1 2 1 2 1 2 1 2 1 2 ...
跑步时
library(ggplot2)
ggplot(dta, aes(x = year, y = severef, color = package, group = run_nb)) +
geom_line()
我期望由于 ggplot2 中的重叠线,将绘制几条不同aes(..., group = run_nb)
的线
相反,输出被卡住了。我尝试了几种变量类型的转换,但无济于事。我究竟做错了什么?
dta <- structure(list(year = c(2016, 2016, 2017, 2017, 2018, 2018, 2019,
2019, 2020, 2020, 2021, 2021, 2022, 2022, 2023, 2023, 2024, 2024,
2016, 2016, 2017, 2017, 2018, 2018, 2019, 2019, 2020, 2020, 2021,
2021, 2022, 2022, 2023, 2023, 2024, 2024, 2016, 2016, 2017, 2017,
2018, 2018, 2019, 2019, 2020, 2020, 2021, 2021, 2022, 2022, 2023,
2023, 2024, 2024), severef = c(0.111823385630219, 0.465018440108279,
0.109918488465996, 0.457096910073382, 0.11417253918809, 0.474787413895822,
0.124623038552219, 0.518245898767047, 0.138076553592572, 0.574192448254701,
0.133435431355833, 0.554892304454577, 0.139052739728505, 0.57825192607885,
0.150916617717648, 0.627587957223443, 0.144179084276974, 0.599569870728368,
0.112252179138183, 0.466801581327609, 0.109674033567054, 0.456080342428412,
0.111055456891102, 0.461825002328107, 0.120224868167075, 0.499956072177523,
0.125299916066184, 0.521060699301965, 0.0855819441772642, 0.355893196744622,
0.0495125747278424, 0.205898436502569, 0.030746318019459, 0.12785880845856,
0.0284200221496644, 0.118184888549004, 0.111823385630219, 0.465018440108279,
0.109918488465996, 0.457096910073382, 0.11417253918809, 0.474787413895822,
0.113843419896702, 0.473418768700291, 0.097003856181354, 0.403391308818959,
0.0628228996117884, 0.261249528583923, 0.0389240209844475, 0.161865851395205,
0.0297564629438263, 0.123742488239764, 0.0276489857179591, 0.114978527404441
), package = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("Baseline",
"HSS", "VMW+ HSS"), class = "factor"), run_nb = c(1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-54L))
解决方案
您的问题是group
美学超越了美学的通常行为colour
,这将使每种颜色产生一条线。使用linetype
美学而不是对group
少数群体来说效果很好。
对于大量组,您可以使用interaction
创建唯一的 run_nb/package 组合并将其用作分组变量。现在每一行都有一个唯一的分组变量。
library(ggplot2)
dta <- structure(list(year = c(2016, 2016, 2017, 2017, 2018, 2018, 2019, 2019, 2020, 2020, 2021, 2021, 2022, 2022, 2023, 2023, 2024, 2024, 2016, 2016, 2017, 2017, 2018, 2018, 2019, 2019, 2020, 2020, 2021, 2021, 2022, 2022, 2023, 2023, 2024, 2024, 2016, 2016, 2017, 2017, 2018, 2018, 2019, 2019, 2020, 2020, 2021, 2021, 2022, 2022, 2023, 2023, 2024, 2024), severef = c(0.111823385630219, 0.465018440108279, 0.109918488465996, 0.457096910073382, 0.11417253918809, 0.474787413895822, 0.124623038552219, 0.518245898767047, 0.138076553592572, 0.574192448254701, 0.133435431355833, 0.554892304454577, 0.139052739728505, 0.57825192607885, 0.150916617717648, 0.627587957223443, 0.144179084276974, 0.599569870728368, 0.112252179138183, 0.466801581327609, 0.109674033567054, 0.456080342428412, 0.111055456891102, 0.461825002328107, 0.120224868167075, 0.499956072177523, 0.125299916066184, 0.521060699301965, 0.0855819441772642, 0.355893196744622,
0.0495125747278424, 0.205898436502569, 0.030746318019459, 0.12785880845856, 0.0284200221496644, 0.118184888549004, 0.111823385630219, 0.465018440108279, 0.109918488465996, 0.457096910073382, 0.11417253918809, 0.474787413895822, 0.113843419896702, 0.473418768700291, 0.097003856181354, 0.403391308818959, 0.0628228996117884, 0.261249528583923, 0.0389240209844475, 0.161865851395205, 0.0297564629438263, 0.123742488239764, 0.0276489857179591, 0.114978527404441 ), package = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("Baseline", "HSS", "VMW+ HSS"), class = "factor"), run_nb = c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -54L))
ggplot(dta, aes(x = year, y = severef, color = package,
group = interaction(run_nb, package))) +
geom_line()
由reprex 包(v0.3.0)于 2020 年 1 月 15 日创建
您的问题与ggplot2中的重叠线不同,因为该示例中的分组变量已经是唯一的 - 每行一个。
推荐阅读
- angularjs - 在 AngularJs 中使用 $templateCache 的更好方法?
- macros - SAS宏从表中提取选定的行
- android - Android Studio 不再正确加载项目
- sql - TD 错误地估计了使用分组收集的统计信息的行数
- java - 一个方法应该什么时候返回 CompletableFuture?
- angular5 - 无法以 Angular 5 下载文件
- sqlalchemy - SQL Alchemy,如何将数据插入两个表并引用外键?
- dc.js - 像 Dc.js 中的条形图一样在条形之外设置行图标签?
- c# - 如何将我的对象属性名称作为节点名称返回
- r - 分配变量值时无法连接