Подписи данных на гитограмме

#r #ggplot2 #histogram #digital-signature

#r #ggplot2 #гистограмма #цифровая подпись

Вопрос:

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

 df<-data.frame(num = c(1:20),
         gender=unlist(strsplit("MFFMMMFMFMMMMMFFFMFM","")),
         age= sample(1:100, 20, replace=T),
         entrance=sample(1:4, 20, replace=T))
 

Данные сортируются и группируются.

 df <- group_by(df, df$entrance, df$gender)
 

Фактически, по полученным данным строится график

 ggplot(df, aes(x= df$entrance))  
 geom_bar(aes(fill=df$gender), position = "dodge") 
 scale_fill_discrete(name = "Title", labels = c("F", "M")) 
 xlab("Distribution of residents by entrances, taking into account gender") 
 ylab("Number of residents")
 

На самом деле, вот результат:

введите описание изображения здесь

Что мне не нравится? Я бы хотел, чтобы, если в категории нет данных, тогда столбец не отображается, а указывается 0. Также я хотел бы иметь метки данных, как на картинке ниже. Ну, я также хотел бы варианты размещения этих значений:

  • внизу (как нарисовано);
  • в центре полосы;
  • поверх полосы.

введите описание изображения здесь

Ответ №1:

Попробуйте это. Вы можете получить нечто похожее на то, что ожидаете, используя фасеты и изменяя некоторые эстетические элементы:

 library(ggplot2)
library(dplyr)
#Plot
df %>% group_by(entrance,gender) %>%
  summarise(N=n()) %>%
  mutate(gender=factor(gender,levels = c('F','M'))) %>%
  complete(gender,fill = list(M=0,F=0)) %>%
  replace(is.na(.),0) %>%
  ggplot(aes(x= factor(gender),y=N,fill=gender))  
  geom_bar(stat='identity', position = position_dodge2(0.9)) 
  geom_text(aes(label=N,y=0),vjust=-0.5,position = position_dodge2(0.9)) 
  scale_fill_discrete(name = "Title", labels = c("F", "M")) 
  facet_wrap(.~entrance,nrow = 1,strip.position = 'bottom') 
  xlab("Distribution of residents by entrances, taking into account gender") 
  ylab("Number of residents") 
  theme(strip.placement = 'outside',
        strip.background = element_blank(),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank())
 

Выходной сигнал:

введите описание изображения здесь

Комментарии:

1. А как насчет нулевой позиции? Я просто хочу указать «0».

2. @КириллГуреев Обновлено, надеюсь, это вам поможет!