#r #ggplot2 #bar-chart #fill
#r #ggplot2 #гистограмма #заполнение
Вопрос:
У меня есть данные, которые выглядят следующим образом:
Моя цель — иметь сетку столбчатой диаграммы следующим образом: каждый график будет специфичен для 1 группы race_ethnicity. Ось x на каждом графике будет представлять собой разные группы age_bin. Для каждого age_bin будет два столбца: 1 для мужчин и 1 для женщин. Для каждого столбца я хочу, чтобы он был заполнен пропорцией вероятного / (Маловероятного вероятного). Предпочтительно, чтобы каждая полоса имела высоту 1 и пересекала ее линией, поэтому, вероятно,% этой полосы будет одного цвета с меткой. Это то, что у меня сейчас есть:
Я сталкиваюсь с проблемами, связанными с 1) использованием предопределенной пропорции в качестве заливки и 2) наличием двух разных «заливок» (одна для биологического пола, одна для предопределенной пропорции.
Спасибо всем, кто может помочь с этим. В настоящее время мой код выглядит следующим образом:
ggplot(data=who_votes_data, aes(x=age_bin,y=1, fill=gender))
geom_bar(stat='identity',aes(fill = gender), position = position_dodge2())
facet_wrap(~race_ethnicity, nrow = 2, scales = "free")
geom_text(aes(label=paste0(sprintf("%1.1f", prop*100),"%"), y=prop),
colour="white")
labs(x = expression("Age Group"), y= ("Prortion of Likely Voters"),
title = "Proportion of Likely Voters Across Age Groups, Race/Ethnicity, and Sex",
caption="Figure 1") theme(plot.caption = element_text(hjust = 0.5, vjust = -0.5, size = 18))
https://docs.google.com/spreadsheets/d/1a7433iwXNSwcuXDJOvqsxNDN6oaYULVlyw22E41JROU/edit?usp=sharing
Обновленный код:
library(tidyverse)
library(ggplot2)
df<- read.csv("samplevotes.csv")
df %>%
group_by(race_ethnicity, age_bin, gender) %>%
summarise(Likely = sum(Likely),
Unlikely = sum(Unlikely),
proportion = Likely/(Likely Unlikely)) %>% ungroup() %>%
ggplot(aes(x = age_bin, y = proportion, fill = gender))
geom_bar(stat = "identity", position = "dodge")
facet_wrap(~race_ethnicity, nrow = 2)
geom_text(aes(label=paste0(sprintf("%1.1f", proportion*100),"%"), y=proportion), position = position_dodge(width = 1), colour="Black", size = 2.2)
labs(x = expression("Age Group"), y= ("Proportion of Likely Voters"), title = "Proportion of Likely Voters Across Age Groups, Race/Ethnicity, and Sex", caption="Figure 1")
theme(plot.caption = element_text(hjust = 0.5, vjust = -0.5, size = 18))
Комментарии:
1. Вам нужно сделать
likely
иNonlikely
один столбец с.pivot_longer
Также, пожалуйста, предоставьте некоторые данные.2. Большое спасибо за быстрый ответ! Я добавил ссылку с некоторыми данными — можете ли вы подробнее рассказать об использовании pivot_longer? РЕДАКТИРОВАТЬ: документация nvm была довольно ясной. Есть ли у вас какие-либо рекомендации по созданию графика с этим новым расположением?
Ответ №1:
Вот код, который я бы использовал. Я внес некоторые изменения в зависимости от способа объединения данных.
df %>%
group_by(race_ethnicity, age_bin, gender) %>%
summarise(Likely = sum(Likely),
Unlikely = sum(Unlikely),
proportion = Likely/(Likely Unlikely)) %>% ungroup() %>%
ggplot(aes(x = age_bin, y = proportion, fill = gender))
geom_bar(stat = "identity", position = "dodge")
facet_wrap(~race_ethnicity, nrow = 2)
geom_text(aes(label=paste0(sprintf("%1.1f", proportion*100),"%"), y=proportion), position = position_dodge(width = 1), colour="Black", size = 2.2)
labs(x = expression("Age Group"), y= ("Proportion of Likely Voters"), title = "Proportion of Likely Voters Across Age Groups, Race/Ethnicity, and Sex", caption="Figure 1")
theme(plot.caption = element_text(hjust = 0.5, vjust = -0.5, size = 18))
Комментарии:
1. Большое вам спасибо! Быстрый вопрос — выполняли ли вы какую-либо другую предварительную обработку вне загрузки в dataframe? Я предполагаю, что вы никогда не использовали pivot_longer, поскольку вероятный столбец не поврежден, но это вызывает следующую ошибку при его запуске: Ошибка: по крайней мере один слой должен содержать все переменные фасетирования:
race_ethnicity
. * Отсутствует графикrace_ethnicity
* Отсутствует слой 1race_ethnicity
* Отсутствует слой 2race_ethnicity
2. Я использовал
library(tidyverse)
. А ты ?3. Да! Я думаю, что %>% терпит неудачу без этого, поэтому у меня это было с самого начала. Я использую ggplot2 и R.4.0.2
4. ты
ungroup()
5. Да — я добавил обновленный фрагмент кода в конец основной части вопроса выше, если это поможет!