Переопределение факторов для facet_wrap в сюжете - PullRequest
0 голосов
/ 19 марта 2020

У меня следующая проблема. У меня есть данные из пакета gapminder, и я хочу сделать geom_line() график некоторых стран с gdpPercap, а также годом. Вот мой подход

country_europe <- gapminder %>%
  filter(continent == "Europe") %>%
  pull(country) %>%
  unique() %>%
  sample(8) %>%
  as.character()


gapminder %>%
  filter(country %in% country_europe) %>%
  mutate(country = reorder(country, desc(gdpPercap))) %>%
  filter(year > 1990) %>%
  ggplot(aes(x = year, y = gdpPercap, color = country)) + 
  geom_point() + geom_line() + facet_wrap(~country) + 
  theme(legend.position = "None", axis.text.x = element_text(angle = 90, hjust = 1))

Здесь я пытаюсь упорядочить фасеты, используя gdpPercap, но это не работает, потому что ВВП зависит от года. enter image description here

Например, в изображении Испания должна быть перед Словенией, потому что у нее больше ВВП за каждый год. Я пытался рассчитать среднее значение ВВП по годам, но это также не принесло желаемого результата. Любая помощь с этим подходом? Спасибо

Редактировать: я думаю, что это лучший подход, как предложено:

gapminder %>%
  filter(country %in% country_europe) %>%
  group_by(country) %>%
  mutate(gdp.mean = mean(gdpPercap)) %>%
  ungroup() %>%
  arrange(desc(gdp.mean)) %>%
  mutate(country=factor(country, levels=unique(country))) %>%
  filter(year > 1990) %>%
  ggplot(aes(x = year, y = gdpPercap, color = country)) + 
  geom_point() + geom_line() + facet_wrap(~country)

1 Ответ

1 голос
/ 19 марта 2020

Вы можете отсортировать страны по среднему gdpPercap, максимальному или другому критерию, а затем установить порядок коэффициентов для country на основе этого. Например, используя среднее значение:

gapminder %>%
  filter(country %in% country_europe) %>%
  mutate(country = reorder(country, desc(gdpPercap))) %>%
  filter(year > 1990) %>%
  group_by(country) %>%
  mutate(avg.gdp = mean(gdpPercap, na.rm=TRUE)) %>%
  ungroup %>%
  arrange(avg.gdp) %>%
  mutate(country=factor(country, levels=unique(country)) %>%
  ggplot(... etc.

. Чтобы ответить на ваш комментарий: Мы хотим, чтобы страны были упорядочены по их среднему (или максимальному, или последнему, и т. Д., c.) ВВП на душу населения по сравнению с период времени данных. Поэтому мы вычисляем это как новый столбец, а затем упорядочиваем данные по этому столбцу (arrange(avg.gdp) в данном случае).

Рамка данных теперь упорядочена таким образом, что каждая страна сначала появляется в данных в порядке ее среднего ВВП на душу населения, что является порядком, который мы хотим для аспектов. Чтобы установить это как порядок для country, мы конвертируем его в коэффициент, а затем используем unique(country) для установки уровней фактора. Это работает, потому что unique возвращает вектор, который поддерживает текущий порядок первого появления данного значения (например, попробуйте запустить unique(c(3,6,3,6,2,2,6))).

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