¿Cómo hacer una pirámide de edad como la trama en R?

14

La pirámide de edad se ve así: texto alternativo
me gustaría hacer algo similar, a saber, 2 gráficos de barras (no histogramas) con las mismas categorías, rotados verticalmente y extendiéndose a ambos lados como en la pirámide.
¿Es una manera simple de hacer esto en R?
También sería bueno controlar el color de cada barra.


fuente

Respuestas:

21

Puede hacer esto con la pyramid.plot()función del plotrixpaquete. Aquí hay un ejemplo:

library(plotrix)
 xy.pop<-c(3.2,3.5,3.6,3.6,3.5,3.5,3.9,3.7,3.9,3.5,3.2,2.8,2.2,1.8,
  1.5,1.3,0.7,0.4)
 xx.pop<-c(3.2,3.4,3.5,3.5,3.5,3.7,4,3.8,3.9,3.6,3.2,2.5,2,1.7,1.5,
  1.3,1,0.8)
 agelabels<-c("0-4","5-9","10-14","15-19","20-24","25-29","30-34",
  "35-39","40-44","45-49","50-54","55-59","60-64","65-69","70-74",
  "75-79","80-44","85+")
 mcol<-color.gradient(c(0,0,0.5,1),c(0,0,0.5,1),c(1,1,0.5,1),18)
 fcol<-color.gradient(c(1,1,0.5,1),c(0.5,0.5,0.5,1),c(0.5,0.5,0.5,1),18)
 par(mar=pyramid.plot(xy.pop,xx.pop,labels=agelabels,
  main="Australian population pyramid 2002",lxcol=mcol,rxcol=fcol,
  gap=0.5,show.values=TRUE))

Lo que termina luciendo así: texto alternativo

Shane
fuente
Ok, de hecho lo reescribí completamente para tener diferentes escalas en ambos lados, pero parece que no hay nada en R que pueda hacerlo de forma nativa.
Estoy seguro de que podría hacerlo con ggplot2, pero requeriría un poco de esfuerzo.
Shane
@mbq También para su información, existe una capacidad de gráfico piramidal en el paquete HH . Esta pregunta en el sitio proporciona ejemplos de datos de tipo Likert, que imagino pueden ser pirateados para producir gráficos de barras similares. En ggplot2, uno necesitaría mostrar los recuentos reflejados, una manera fácil es hacer que una barra sea negativa y la otra sea positiva (sin embargo, no estoy seguro de si ggplot2 admite dimensiones reflejadas como las gráficas piramidales).
Andy W