Уровни группового фактора в ggplot - PullRequest
0 голосов
/ 24 мая 2018

У меня есть фрейм данных

df <- data.frame(respondent = factor(c(1, 2, 3, 4, 5, 6, 7)),
                 location = factor(c("US: California", "US: Oregon", "Mexico",
                                     "US: Texas", "Canada", "Mexico", "Canada")))

Есть три отдельных уровня, связанных с США.Я не хочу сворачивать их, поскольку различие между состояниями полезно для анализа данных.Я хотел бы, однако, иметь базовый барплот, который ставит штаты США друг на друга, так что на барплее есть три бара - Канада, Мексика и США - последний разделен на три штата,вместо этого:

ggplot(df, aes(location, 1))+
    geom_bar(stat = "identity")+
    theme(axis.text.x = element_text(angle = 45, hjust = 1),
          text = element_text(size=10))

, что дает мне пять баров, с тремя для США.

Есть старый похожий вопрос о Stackoverflow ( Уровни группировки / коэффициента суммирования в ggplotгистограмма ), но данное решение довольно запутанно.Я надеюсь, что есть более простой способ добиться этого.Есть идеи как это можно сделать?

1 Ответ

0 голосов
/ 24 мая 2018

tidyverse решение: используйте separate из tidyr, чтобы разделить местоположения на : на два столбца, один для страны и один для штата.Места, в которых нет разделителя двоеточий, получат NA для штата, который можно заменить на что-то вроде «За пределами США».

Я переместил этот неамериканский уровень до конца, чтобы он появлялся последним в легенде, но это может не понадобиться для ваших целей.Затем установите заливку на основе состояния, чтобы вы могли видеть, как значения в США складываются по штатам.

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

library(tidyverse)
df <- data.frame(respondent = factor(c(1, 2, 3, 4, 5, 6, 7)), location = factor(c("US: California", "US: Oregon", "Mexico", "US: Texas", "Canada", "Mexico", "Canada")))

with_states <- df %>%
  separate(location, into = c("Country", "State"), sep = ": ") %>%
  replace_na(list(State = "Outside US")) %>%
  mutate(State = as.factor(State) %>% fct_relevel("Outside US", after = Inf))

ggplot(with_states, aes(x = Country, y = 1, fill = State)) +
  geom_col()

Создано в 2018-05-24 с помощью пакета Представить (v0.2.0).

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