Использование aes () для перекраски только одной строки в ggplot - PullRequest
0 голосов
/ 18 июня 2020

У меня есть набор данных, который выглядит следующим образом:

Year Region       Yield
2009 northeast    9.1
2009 northwest    8
2009 yorkshire    7.8
2009 eastmidlands 8.1
2009 westmidlands 7.9
...
2016 Average      8.0
2017 Average      8.1
2018 Average      7.4

Данные за период с 2009 по 2018 год. Внизу данных есть несколько средних значений за каждый год. Я хочу построить данные с помощью следующего кода, но хочу изменить aesteti c только средней линии (желательно на size=2, linetipe=dashed, color="blue").

viz1 <- ggplot(vizdata, aes(x=Year,y=Yield)) +
  geom_line(aes(x=Year,y=Yield, color = Region),size=1) +
  geom_point(aes(color=Region),size = 2) +
  labs(title = "Yield for Winter Wheat", subtitle = "Winter wheat yield throughout the UK between 2009 and 2018", y = "Yield  [t/ha]") +
  scale_x_continuous(breaks=seq(2009, 2018, 1))

Plot resulting from the ggplot()

Я также пробовал выделить средние данные и построить их как собственные geom_line, но тогда новая строка, похоже, вообще не отображается в легенде.

Есть ли шанс, что вы могли бы помочь?

1 Ответ

0 голосов
/ 18 июня 2020

Используя некоторые сводные данные о пробелах о средней продолжительности жизни по регионам мира в качестве примера данных, этого можно достичь следующим образом.

Основная идея c состоит в том, чтобы использовать именованные векторы для определения значений для затем можно использовать через scale_xxx_manual для установки color, linetype и size строк:

library(ggplot2)

vizdata <- structure(list(year = c(
  2010L, 2010L, 2010L, 2010L, 2011L, 2011L,
  2011L, 2011L, 2012L, 2012L, 2012L, 2012L, 2013L, 2013L, 2013L,
  2013L, 2014L, 2014L, 2014L, 2014L, 2015L, 2015L, 2015L, 2015L,
  2010L, 2011L, 2012L, 2013L, 2014L, 2015L
), region = c(
  "Africa",
  "Americas", "Asia", "Europe", "Africa", "Americas", "Asia", "Europe",
  "Africa", "Americas", "Asia", "Europe", "Africa", "Americas",
  "Asia", "Europe", "Africa", "Americas", "Asia", "Europe", "Africa",
  "Americas", "Asia", "Europe", "World", "World", "World", "World",
  "World", "World"
), life_exp = c(
  61.0055555555556, 73.3484848484848,
  71.9498113207547, 77.4325581395349, 61.1925925925926, 74.4, 72.1739622641509,
  77.746511627907, 61.9648148148148, 74.5515151515151, 72.3358490566038,
  78, 62.3611111111111, 74.6666666666667, 72.5845283018868, 78.2348837209302,
  62.5907407407407, 74.8515151515151, 72.708679245283, 78.3906976744186,
  63.0648148148148, 75.0181818181818, 72.8515094339623, 78.5279069767442,
  70.2608743169399, 70.6443715846995, 71.0060109289617, 71.2709289617486,
  71.4445901639344, 71.6881420765027
)), row.names = c(NA, -30L), class = c(
  "tbl_df",
  "tbl", "data.frame"
))

names_regions <- setdiff(unique(vizdata$region), "World")
n_regions <- length(names_regions)

cols <- c(World = "blue", setNames(scales::hue_pal()(n_regions), names_regions))
ltys <- c(World = "dashed", setNames(rep("solid", n_regions), names_regions))
sizes <- c(World = 2, setNames(rep(1, n_regions), names_regions))

viz1 <- ggplot(vizdata, aes(x=year,y=life_exp)) +
  geom_line(aes(color = region, linetype = region, size = region)) +
  geom_point(aes(color = region),size = 2) +
  scale_color_manual(values = cols) +
  scale_linetype_manual(values = ltys) +
  scale_size_manual(values = sizes) +
  labs(title = "Yield for Winter Wheat", subtitle = "Winter wheat yield throughout the UK between 2009 and 2018", y = "Yield  [t/ha]") +
  scale_x_continuous(breaks=seq(2009, 2018, 1))
viz1

Создано 2020- 06-18 с помощью пакета REPEX (v0.3.0)

...