首页 > 解决方案 > 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)

标签: rggplot2

解决方案


试试这个

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)

输出

在此处输入图像描述


推荐阅读