pyramid.plot {plotrix} | R Documentation |
Displays a pyramid (opposed horizontal bar) plot on the current graphics device.
pyramid.plot(xy,xx,labels,top.labels=c("Male","Age","Female"), main="",laxlab=NULL,raxlab=NULL,unit="%",xycol,xxcol,gap=1, labelcex=1,mark.cat=NA,add=FALSE)
xy,xx |
Vectors of percentages (but see Details) both of which should total 100 if this is a population pyramid, and be of equal length. |
labels |
Labels for the categories represented by each pair of bars. There should be a label for each xy or xx value, even if empty. |
top.labels |
The two categories represented on the left and right sides of the plot and a heading for the labels up the center. |
main |
Optional title for the plot. |
laxlab |
Optional labels for the left x axis ticks. |
raxlab |
Optional labels for the right x axis ticks. |
unit |
The label for the units of the plot. |
xycol,xxcol |
Color(s) for the left and right sets of bars. Both of these default to 1:length(labels). |
gap |
One half of the space between the two sets of bars for the labels in user units. |
labelcex |
Expansion for the category labels. |
mark.cat |
If an integer equal to the index of one of the labels is passed, that label will have a rectangle drawn around it. |
add |
Whether to add bars to an existing plot. Usually this involves overplotting a second set of bars, perhaps transparent. |
pyramid.plot is principally intended for population pyramids, although it can display other types of opposed bar charts with suitable modification of the arguments. If the user wants a different unit for the display, just change unit accordingly. The default gap of two units is usually satisfactory for the four to six percent range of most bars on population pyramids.
If xy and xx are matrices or data frames, pyramid.plot will produce opposed stacked bars with the first columns innermost. In this mode, colors are limited to one per column. The stacked bar mode will in general not work with the add method. Note that the stacked bar mode can get very messy very quickly.
The add argument allows one or more sets of bars to be plotted on an existing plot. If these are not transparent, any bar that is shorter than the bar that overplots it will disappear. Only some graphic devices (e.g. pdf) will handle transparency.
In order to add bars, the function cannot restore the initial margin values or the new bars will not plot properly. To automatically restore the plot margins, call the function as in the example.
The return value of par("mar") when the function was called.
Jim Lemon
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+") xycol<-color.gradient(c(0,0,0.5,1),c(0,0,0.5,1),c(1,1,0.5,1),18) xxcol<-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",xycol=xycol,xxcol=xxcol)) # three column matrices avtemp<-c(seq(11,2,by=-1),rep(2:6,each=2),seq(11,2,by=-1)) malecook<-matrix(avtemp+sample(-2:2,30,TRUE),ncol=3) femalecook<-matrix(avtemp+sample(-2:2,30,TRUE),ncol=3) # use a background color par(bg="#eedd55") # group by age agegrps<-c("0-10","11-20","21-30","31-40","41-50","51-60", "61-70","71-80","81-90","91+") oldmar<-pyramid.plot(malecook,femalecook,labels=agegrps, unit="Bowls per month",xycol=c("#ff0000","#eeee88","#0000ff"), xxcol=c("#ff0000","#eeee88","#0000ff"), top.labels=c("Males","Age","Females"),gap=3) # put a box around it box() # give it a title mtext("Porridge temperature by age and sex of cook",3,2,cex=1.5) # stick in a legend legend(par("usr")[1],11,c("Too hot","Just right","Too cold"), fill=c("#ff0000","#eeee88","#0000ff")) # don't forget to restore the margins and background par(mar=oldmar,bg="transparent")