Как сгруппировать столбцы в ggplot2 и изменить цвета для определенных значений? - PullRequest
0 голосов
/ 02 мая 2019

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

На данный момент это лучшее решение:

df <- data.frame("industry"=c("A","A", "B", "B", "C", "C",
                              "A","A", "B", "B", "C", "C"), 
                 "value"=c(4,6,7,1, 5,9,8,3, 5,5,6,7),
                 "woman"=c(1,0,1,0,1,0,1,0,1,0,1,0),
                 "disabled"=c(1,1,1,1,1,1,0,0,0,0,0,0))

ggplot(df,aes(paste(industry,disabled),value))+
  geom_col(aes(fill=factor(woman)))+
  coord_flip()

enter image description here

Это в основном то, что я хочу (см. Ссылку выше), но столбцы должны быть сгруппированы в каждой отрасли, используя только одну метку для отрасли для обоих значений отключенных. Нет метки, необходимой для инвалидов. Отключенные столбцы = 0 должны иметь блеклый цвет по сравнению с отключенными столбцами = 1.

Цель диаграммы состоит в том, чтобы отобразить распределение занятости по отраслям для населения с ограниченными возможностями по сравнению с общим населением (выцветшим) и показать гендерные пропорции для каждого населения. (Значения в примере только для иллюстрации).

1 Ответ

0 голосов
/ 02 мая 2019

Попробуйте это:

library(ggplot2)

ggplot(df, aes(interaction(disabled, industry), value, alpha = factor(woman))) +
  geom_col(aes(fill = factor(woman))) +
  scale_alpha_manual(values = c(0.5, 1)) +
  scale_x_discrete(labels = c(0, 1, 0, 1, 0, 1)) +
  annotate("text", label = "A", x = 1.5, y = -2) +
  annotate("text", label = "B", x = 3.5, y = -2) +
  annotate("text", label = "C", x = 5.5, y = -2) +
  coord_cartesian(ylim = c(0, 15), clip = "off", expand = FALSE) +
  coord_flip(ylim = c(0, 15), clip = "off", expand = TRUE) +
  theme(axis.title.y = element_blank())

Мы вручную указываем, что значения альфа-канала должны изменяться на factor(woman), и устанавливаем значения альфа-уровня для конкретного уровня с помощью scale_alpha_manual(). Мы устанавливаем вашу подгруппу 0,1 метки вручную с помощью scale_x_discrete. Мы используем annotate() для размещения меток вашей группы, которые можно размещать за пределами области печати, используя coord_cartesian() с clip = "off".

...