Сгруппированный гистограмма с частотными числами в функции R - PullRequest
0 голосов
/ 08 апреля 2020

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

library(ggplot2)
datab <- data.frame(
  value=sample(c(1,2,3,4,5), 50, replace = TRUE),
  value2=sample(c(1,2,3,4,5), 50, replace = TRUE),
  Sex=factor(x=rep(c(1,1,1,0,0),10), labels=c("M","F"))
)


graph_percentages <- function(varijabla){
  ggplot(datab, aes(x= datab[[varijabla]], y=stat(prop), fill=Sex, group=Sex)) +
    geom_bar(position = "dodge", color= "black") +
    geom_text(position = position_dodge(1), size = 2.3, aes(label= scales::percent(..prop..), y= ..prop..), stat="count", vjust = -0.5)+
    xlab(colnames(datab[,varijabla]))  + ylab(NULL)
}

graph_percentages("value")

Однако я озадачен тем, как сделать аналогичную функцию, которая бы показывала частоты вместо пропорций. Основная проблема в том, что в "geom_text" я не могу изменить "y =" для отображения частот. По крайней мере, я не нашел, как.

1 Ответ

0 голосов
/ 08 апреля 2020

stat(count) может быть, то, что вы ищете?

ggplot(datab, aes(x= datab[[varijabla]], y=stat(count), fill=Sex, group=Sex)) +
  geom_bar(position = "dodge", color= "black") +
  geom_text(position = position_dodge(1), size = 2.3, aes(label= ..count.., y= ..count..), stat="count", vjust = -0.5)+
  xlab(colnames(datab[,varijabla]))  + ylab(NULL)

И чтобы сохранить обновленный синтаксис, вы можете заменить ..count.. на stat(count) также при вызове geom_text(), т.е. :

geom_text(position = position_dodge(1), size = 2.3, aes(label= stat(count), y= stat(count)), stat="count", vjust = -0.5)
...