簡體   English   中英

ggplot2:有條件地改變線型和顏色

[英]ggplot2: conditionally changing linetype and color

我有以下數據框:

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)

輸出

在此處輸入圖片說明

這可以通過兩個geom_line圖層並過濾每個圖層要顯示的數據來實現:

library(tidyverse)

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)

df1 <- df %>% 
  mutate(projection = year %in% c("2020-2025", "2025-2030"))

ggplot(mapping = aes(year, value, color = group, group = group)) +
  geom_line(data = filter(df1, !year %in% c("2025-2030")), size = 1.1) +
  geom_line(data = filter(df1, projection), size = 1.1, linetype = "dashed")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM