ggplot2: граненая гистограмма с использованием пропорций из нескольких фиктивных переменных, как реструктурировать данные? - PullRequest
0 голосов
/ 30 мая 2019

Я ищу визуализацию данных для нескольких фиктивных переменных с учетом пола. Поскольку в моей выборке больше женщин, чем мужчин, я бы хотел использовать пропорции вместо количества, и мне нужна только доля успехов (1). Я не хочу бары для 0 и 1.

У меня есть ощущение, что мне нужно преобразовать / реструктурировать мои данные, но я не уверен, как это сделать. Я знаю, что y = ..prop.., group = 1 вступит в игру, и что мне, вероятно, придется использовать огранку, но я не сталкивался ни с какими вопросами, похожими на то, что я пытаюсь сделать.

Мой фактический набор данных имеет 9 различных видов транспорта, не включая 3, включенных здесь. Я представляю график с тремя рядами гистограмм, по три переменные на строку. Ось Y представляет собой проценты, а X имеет транспортный тип, и над ним "Men" и "Women" с процентом людей, у которых есть 1 для этой переменной, представленной в строке выше. Таким образом, всего шесть столбцов в строке, для трех переменных в строке и трех строк.

Здесь - это ссылка на очень быстрый и грубый набросок того, что я ищу (но имейте в виду, что фактические наборы данных имеют 9 переменных, а не 3, изображенные здесь). Честно говоря, я не очень разборчив в особенностях, если только это визуализация, которая показывает, как мужчины и женщины по-разному используют транспорт.

#data
dfTrans <- data.frame(
  "transBus" = c(0, 0, 0, 1, 0, 1),
  "transCar" = c(1, 1, 1, 0, 1, 0),
  "transTaxi" = c(0, 1, 0, 1, 0, 1),
  "gender" = c("Man", "Woman", "Woman", "Woman", "Woman", "Man")
)

#This is the closest I've been able to come, which is not that close
ggplot(data = dfTrans) +
  geom_bar(mapping = aes(x = transBus, y = ..prop.., group = 1), stat = "count") +
  scale_y_continuous(labels = scales::percent_format()) +
  facet_grid(. ~ gender)

1 Ответ

1 голос
/ 30 мая 2019

Попробуйте собрать данные и огранку по транспортному режиму

dfTrans %>% 
  gather(key = mode, value = value, -gender) %>%
  mutate(value = factor(value)) %>% 
  ggplot(aes(x = gender, fill = value)) + 
  geom_bar(position = position_fill()) + 
  scale_y_continuous(labels = scales::percent_format()) +
  facet_wrap(~mode) 

enter image description here

Обновление

Чтобы просто показать синюю часть, вам необходимо обобщить данные перед раздачей

dfTrans %>% 
  gather(key = mode, value = value, -gender) %>%
  group_by(mode, gender) %>% 
  summarise(prop = mean(value) ) %>% 
  ggplot(aes(x = gender, y = prop)) + 
  geom_col() + 
  scale_y_continuous(labels = scales::percent_format()) +
  facet_wrap(~mode) 
...