Добавить легенду к фасетам ggplot2 с несколькими строками? - PullRequest
0 голосов
/ 11 февраля 2020

У меня проблема с моим ggplot для многогранных многострочных графиков для семи городских районов в Южной Корее.

Структура моего набора данных CSV точно такая же, как и для панельных данных с поперечным сечением и временем Размеры серий для городов с течением времени.

Ниже приведен формат моего набора данных:

Year   City    VKT index  GDP index 
2012   Seoul      100      100
2013   Seoul      94       105
2014   Seoul      96       110
..............................
2012   Busan      100      100
2013   Busan      97       105
..............................
2012   Daegu     100       100       
2013   Daegu     104       114

Мой код также выглядит следующим образом:

deccity <- read_csv("decouplingbycity.csv")

deccity %>% filter(is.na(Year) == FALSE) %>%
ggplot(deccity, mapping = aes(x=Year)) +
  geom_line(size = 1, aes(y = `GDP index`), color = "darkred") +
  geom_line(size = 1,aes(y = `VKT index`), color="steelblue", linetype="twodash")+
  labs(y="Index: 1992=100",
       title = "Decoupling by city")+
  facet_wrap(~City)

Вы можете увидеть сюжет у меня сейчас. Однако есть проблема, и очевидная проблема заключается в том, что я не вижу своих легенд о переменных «индекс ВКТ» и «индекс ВВП». Я был бы очень признателен, если бы кто-то мог вмешаться и разобраться в другом способе сделать это.

Пожалуйста, обратитесь к моим многопанельным участкам без легенды для более глубокого понимания того, что я ищу:

enter image description here

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Мой совет, чтобы изменить ваши данные в «аккуратном» виде, это позволит вам избежать больших проблем в будущем (не только с ggplot2). См. эту замечательную документацию.

Здесь проблема не в функции facet_grid(), а в способе указания ggplot2 данных для включения в легенду; эти данные должны быть внутри aes().

Поскольку вы не предоставляете воспроизводимый набор данных, я использую набор mtcars, который входит в состав RStudio. Просто скопируйте и вставьте фрагмент кода ниже, и он запустится.

# very usefull set of packages
library(tidyverse)

# here is what you are trying to do
ex_plot1 = ggplot(data = mtcars, aes(x = disp)) +
  geom_line(aes(y = mpg), color = "red") +
  geom_line(aes(y = qsec), color = "green")
plot(ex_plot1) # see there is no legend

# reshape your data this way:
ex_data2 = pivot_longer(data = mtcars, 
                        cols = c("mpg", "qsec"),
                        values_to = "values",
                        names_to = "colored_var")
# and then plot it, legend appears
ex_plot2 = ggplot(data = ex_data2, aes(x = disp, y = values, color = colored_var)) +
  geom_line()
plot(ex_plot2)

[РЕДАКТИРОВАТЬ] добавил выходные данные

сюжет без легенды, ex_plot1

plot without legend, ex_plot1

сюжет с легендой, ex_plot2

plot with legend, ex_plot2

0 голосов
/ 16 февраля 2020

Вот как я настроил свой код для получения нужных мне многопанельных графиков. Спасибо Датановии за отличные справочные материалы! Я также включил легенду.

dahir %>% filter(is.na(Year) == FALSE) %>% 
ggplot(dahir, mapping = aes(x = Year, y = value)) + 
  geom_line(size = 1.2, aes(color = variable, linetype = variable)) + 
  scale_color_manual(values = c("darkred", "steelblue"))+
  labs(y="Index: 2012=100",
       title = "Decoupling by City")+
  facet_wrap (~City)

Разделение в столичных городах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...