r - ggplot2:有条件地改变线型和颜色
问题描述
我有以下数据框:
df <- tribble(
~group, ~year, ~value,
"group1", "2010-2015", 70,
"group2", "2010-2015", 75,
"group1", "2015-2020", 72,
"group2", "2015-2020", 77,
"group1", "2020-2025", 74,
"group2", "2020-2025", 79,
"group1", "2025-2030", 76,
"group2", "2025-2030", 81)
我想绘制为x,年份和y,值,按组着色,即
ggplot(df, aes(year, value, color = group, group = group)) +
geom_line(size = 1.1)
但我希望年份“2020-2025”和“2025-2030”是虚线。
使用以下代码我收到此错误:“错误:geom_path:如果您使用点线或虚线,颜色、大小和线型必须在整个线上保持不变”
df %>%
mutate(projection = year %in% c("2020-2025", "2025-2030")) %>%
ggplot(aes(year, value, color = group, group = group)) +
geom_line(aes(linetype = projection), size = 1.1)
解决方案
试试这个
library(tidyr)
library(dplyr)
library(ggplot2)
df %>%
mutate(projection = list("2010-2015" = F, "2015-2020" = c(T, F), "2020-2025" = T, "2025-2030" = T)[year]) %>%
unnest(projection) %>%
ggplot(aes(year, value, color = group, group = interaction(group, projection))) +
geom_line(aes(linetype = projection), size = 1.1)
输出
另一种形式
df %>%
mutate(projection = list("2010-2015" = F, "2015-2020" = F, "2020-2025" = c(T, F), "2025-2030" = T)[year]) %>%
unnest(projection) %>%
ggplot(aes(year, value, color = group, group = interaction(group, projection))) +
geom_line(aes(linetype = projection), size = 1.1)
输出
推荐阅读
- powerbi - 如何将 PowerBi 中的小计从总和更改为平均值?
- google-analytics - Google Analytics UserID API 提取
- node.js - AdonisJS 单路打不开
- typescript - 将数组作为参数应用到 Date 构造函数
- c# - 查看模型结果的下拉列表
- chisel - 如何在 Chisel (regmap) 中遍历类似的寄存器定义
- php - 如何在 php 中包含变量值作为 url 的一部分
- ms-word - 在 Word 文档中插入带有插入文本的换行符
- java - 深度优先搜索父、距离、完成Java问题
- arrays - 如何将数组中的所有导航项传递给 Laravel 中的所有视图