Population pyramid plot with ggplot2 and dplyr (instead of plyr)

后端 未结 3 1100
小蘑菇
小蘑菇 2020-12-11 23:14

I am trying to reproduce the simple population pyramid from the post Simpler population pyramid in ggplot2

using ggplot2 and dplyr (instead

3条回答
  •  旧巷少年郎
    2020-12-11 23:42

    To build an Age Pyramid with individual data or microdata you can use:

    test <- data.frame(v=sample(1:100, 1000, replace=T), g=c('M','F'))
    
    ggplot(data = test, aes(x = v, fill = g)) + 
      geom_histogram(data = subset(test, g == "F"), binwidth = 5, color="white", position = "identity") +
      geom_histogram(data = subset(test, g == "M"), binwidth = 5, color="white", position = "identity", 
                     mapping = aes(y = - ..count.. )) +
      scale_x_continuous("Age", breaks = c(seq(0, 100, by=5))) +
      scale_y_continuous("Population", breaks = seq(-30, 30, 10), labels = abs) +
      scale_fill_discrete(name = "Sex") +
      coord_flip() +
      theme_bw()
     
    

    Changing the binwidth in geom_histogram() can group your data in wider categories.

    Changing binwidth to 10 and adjusting the axis breaks:

    ggplot(data = test, aes(x = v, fill = g)) + 
      geom_histogram(data = subset(test, g == "F"), binwidth = 10, color="white", position = "identity") +
      geom_histogram(data = subset(test, g == "M"), binwidth = 10, color="white", position = "identity", 
                     mapping = aes(y = - ..count.. )) +
      scale_x_continuous("Age", breaks = c(seq(0, 100, by = 10))) +
      scale_y_continuous("Population", breaks = seq(-100, 100, 10), labels = abs) +
      scale_fill_discrete(name = "Sex") +
      coord_flip() +
      theme_bw()
    

提交回复
热议问题