#r #ggplot2
#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)
Ответ №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)
Вывод
Ответ №2:
Это может быть достигнуто с помощью двух 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")