#r #ggplot2
#r #ggplot2
Вопрос:
Мой фрейм данных похож на этот
df<-read.table (text=" Gender Fruit Food
Male Pear Yes
Female Pear Yes
Male Grape Yes
Female Apple No
Male Grape No
Male Pear No
Male Guba Yes
Male Grape No
Female Apple No
Female Pear Yes
Female Apple Yes
Male Guba No
Female Guba No
Male Pear Yes
Male Apple Yes
Male Pear No
Female Pear Yes
Male Guba No
", header=TRUE)
Я хочу получить гистограмму, подобную этой, вместе с таблицей под этим графиком для отображения чисел:
В сюжете G, A, G, P следует читать Виноград, Яблоко, Губа и Груша
Было бы хорошо, если бы у нас была таблица под этим графиком, чтобы увидеть значения. Это было сделано в Excel просто.
Ответ №1:
При ggplot
этом вам необходимо сопоставить каждую из интересующих вас переменных с эстетикой или аспектом. Так что что-то подобное может сработать:
ggplot(df)
geom_bar(aes(x=Fruit, fill=Food),
position = "dodge")
facet_wrap(~Gender)
Чтобы добавить таблицу, вы можете просто вычислить ее отдельно, а затем преобразовать в элемент графика.
p_grph <- ggplot(df)
geom_bar(aes(x=Fruit, fill=Food),
position = "dodge")
facet_wrap(~Gender)
p_table <- df %>%
group_by(Gender, Fruit, Food) %>%
summarize(count=n()) %>%
gridExtra::tableGrob()
gridExtra::grid.arrange(p_grph, p_table)
Комментарии:
1. Как показано на иллюстрации Duck, вы можете сгенерировать таблицу отдельно с
group_by
помощью иsummarize
и присоединить ее к графику сpatchwork
помощью (или включить их оба в документ Rmarkdown). Я редактирую свой ответ сgridExtra
иллюстрацией.
Ответ №2:
Вы также можете попробовать:
library(ggplot2)
library(dplyr)
#Code
df %>% group_by_all() %>% summarise(N=n()) %>%
ggplot(aes(x=Fruit,y=N,fill=Fruit))
geom_bar(stat = 'identity',
position = position_dodge2(0.9,preserve = 'single'))
facet_wrap(Gender~Food,scales = 'free',nrow = 1)
theme(legend.position = 'top')
Вывод:
Если вы хотите добавить таблицу, вы можете использовать patchwork
:
library(patchwork)
#Data for table
Tab <- df %>% group_by_all() %>% summarise(N=n())
#Code
G1 <- df %>% group_by_all() %>% summarise(N=n()) %>%
ggplot(aes(x=Fruit,y=N,fill=Fruit))
geom_bar(stat = 'identity',
position = position_dodge2(0.9,preserve = 'single'))
facet_wrap(Gender~Food,scales = 'free',nrow = 1)
theme(legend.position = 'top')
#Compose
G1 gridExtra::tableGrob(Tab)
Вывод:
Если вам нужна приведенная ниже таблица, вы можете изменить
с помощью /
.
Комментарии:
1. @user330 Да, я добавлю сейчас!
2. @user330 Я добавил обновление, надеясь, что это поможет!
3. Спасибо — извините, но когда я запускаю ваши коды на большом объеме выборки, гистограмма выглядит одинаково. и предоставленная таблица не помогает, поскольку нет никаких доказательств частотного распределения переменных. Я могу легко получить, используя SPSS и Excel.
4. @user330 Да, с большими данными вы должны быть осторожны с тем, как упорядочивать данные, здесь выборка небольшая.