Jak zrobić piramidę wieku jak fabuła w R?

14

Piramida wieku wygląda następująco: alternatywny tekst
chciałbym zrobić coś podobnego, a mianowicie 2 wykresy słupkowe (nie histogramy) z tymi samymi kategoriami, obrócone pionowo i rozciągające się na obie strony jak w piramidzie.
Czy to prosty sposób na zrobienie tego w R?
Byłoby również miło kontrolować kolor każdego paska.


źródło

Odpowiedzi:

21

Możesz to zrobić za pomocą pyramid.plot()funkcji z plotrixpakietu. Oto przykład:

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

Które kończy się tak: alternatywny tekst

Shane
źródło
Ok, zresztą przepisałem go całkowicie, aby mieć różne skale po obu stronach, ale wydaje się, że w R nie ma nic, co mogłoby to zrobić natywnie.
Jestem pewien, że możesz to zrobić za pomocą ggplot2, ale wymagałoby to trochę wysiłku.
Shane
@mbq Również FYI ma możliwości wykresu piramidy w pakiecie HH . To pytanie na stronie podaje przykłady danych typu Likerta, które, jak sądzę, mogą zostać zhakowane w celu stworzenia podobnych wykresów słupkowych. W ggplot2 trzeba wyświetlać liczby odbite, łatwym sposobem jest po prostu, aby jeden słupek był ujemny, a drugi dodatni (nie jestem pewien, czy ggplot2 obsługuje wymiary lustrzane, takie jak wykresy piramidalne).
Andy W