Como fazer pirâmide etária como enredo em R?

14

A pirâmide etária é assim: texto alternativo
eu gostaria de fazer algo semelhante, ou seja, 2 gráficos de barras (não histogramas) com as mesmas categorias, girados verticalmente e estendendo-se para os dois lados como na pirâmide.
É uma maneira simples de fazer isso no R?
Também seria bom controlar a cor de cada barra.


fonte

Respostas:

21

Você pode fazer isso com a pyramid.plot()função do plotrixpacote. Aqui está um exemplo:

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))

O que acaba ficando assim: texto alternativo

Shane
fonte
Ok, na verdade eu o reescrevi completamente para ter escalas diferentes em ambos os lados, mas parece que não há nada em R que possa fazê-lo nativamente.
Tenho certeza de que você poderia fazer isso com o ggplot2, mas isso exigiria um pouco de esforço.
Shane
@mbq Também para sua informação, há um gráfico de pirâmide no pacote HH . Essa pergunta no site fornece exemplos para dados do tipo Likert, que eu imagino que podem ser invadidos para produzir gráficos de barras semelhantes. No ggplot2, é necessário exibir as contagens refletidas, uma maneira fácil é ter apenas uma barra negativa e a outra positiva (não tenho certeza se o ggplot2 suporta dimensões espelhadas, como gráficos de pirâmide).
Andy W