Functions to plot rates from a table classified by age and calendar time (period)
Produces plots of rates versus age, connected within period or cohort
(Aplot
), rates versus period connected within age-groups
(Pplot
) and rates and rates versus date of birth cohort
(Cplot
). rateplot
is a wrapper for these, allowing
to produce the four classical displays with a single call.
rateplot( rates, which = c("ap","ac","pa","ca"), age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, a.grid = grid, p.grid = grid, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), a.lim = range( age, na.rm=TRUE ) + c(0,diff( range( age ) )/30), p.lim = range( per, na.rm=TRUE ) + c(0,diff( range( age ) )/30), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = "Age at diagnosis", p.lab = "Date of diagnosis", c.lab = "Date of birth", ylab = "Rates", type = "l", lwd = 2, lty = 1, log.ax = "y", las = 1, ann = FALSE, a.ann = ann, p.ann = ann, c.ann = ann, xannx = 1/20, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), p.thin = seq( 1, length( per ), 2 ), c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), col = par( "fg" ), a.col = col, p.col = col, c.col = col, ... ) Aplot( rates, age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, a.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), a.lim = range( age, na.rm=TRUE ), ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = names( dimnames( rates ) )[1], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, c.col = col, p.col = col, c.ann = FALSE, p.ann = FALSE, xannx = 1/20, cex.ann = 0.8, c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), p.thin = seq( 1, length( per ), 2 ), p.lines = TRUE, c.lines = !p.lines, ... ) Pplot( rates, age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, p.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), p.lim = range( per, na.rm=TRUE ) + c(0,diff(range(per))/30), ylim = range( rates[rates>0], na.rm=TRUE ), p.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), at = NULL, labels = paste( at ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, ann = FALSE, cex.ann = 0.8, xannx = 1/20, a.thin = seq( 1, length( age ), 2 ), ... ) Cplot( rates, age = as.numeric( rownames( rates ) ), per = as.numeric( colnames( rates ) ), grid = FALSE, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), c.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, xannx = 1/20, ann = FALSE, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), ... )
rates |
A two-dimensional table (or array) with rates to be plotted. It is assumed that the first dimension is age and the second is period. |
which |
A character vector with elements from
|
age |
Numerical vector giving the means of the
age-classes. Defaults to the rownames of |
per |
Numerical vector giving the means of the periods. Defaults
to the columnnames of |
grid |
Logical indicating whether a background grid should be drawn. |
a.grid |
Logical indicating whether a background grid on the age-axis should be drawn. If numerical it indicates the age-coordinates of the grid. |
p.grid |
do. for the period. |
c.grid |
do. for the cohort. |
ygrid |
do. for the rate-dimension. |
col.grid |
The colour of the grid. |
a.lim |
Range for the age-axis. |
p.lim |
Range for the period-axis. |
c.lim |
Range for the cohort-axis. |
ylim |
Range for the y-axis (rates). |
at |
Position of labels on the y-axis (rates). |
labels |
Labels to put on the y-axis (rates). |
a.lab |
Text on the age-axis. Defaults to "Age". |
p.lab |
Text on the period-axis. Defaults to "Date of diagnosis". |
c.lab |
Text on the cohort-axis. Defaults to "Date of birth". |
ylab |
Text on the rate-axis. Defaults to the name of the rate-table. |
type |
How should the curves be plotted. Defaults to |
lwd |
Width of the lines. Defaults to 2. |
lty |
Which type of lines should be used. Defaults to 1, a solid line. |
log.ax |
Character with letters from |
las |
see |
ann |
Should the curves be annotated? |
a.ann |
Logical indicating whether age-curves should be annotated. |
p.ann |
do. for period-curves. |
c.ann |
do. for cohort-curves. |
xannx |
The fraction that the x-axis is expanded when curves are annotated. |
cex.ann |
Expansion factor for characters annotating curves. |
a.thin |
Vector of integers indicating which of the age-classes should be labelled. |
p.thin |
do. for the periods. |
c.thin |
do. for the cohorts. |
col |
Colours for the curves. |
a.col |
Colours for the age-curves. |
p.col |
do. for the period-curves. |
c.col |
do. for the cohort-curves. |
p.lines |
Should rates from the same period be connected? |
c.lines |
Should rates from the same cohort be connected? |
... |
Additional arguments pssed on to |
Zero values of the rates are ignored. They are neiter in the plot nor in the calculation of the axis ranges.
NULL
. The function is used for its side-effect, the plot.
Bendix Carstensen, Steno Diabetes Center, http://bendixcarstensen.com
data( blcaIT ) attach(blcaIT) # Table of rates: bl.rate <- tapply( D, list(age,period), sum ) / tapply( Y, list(age,period), sum ) bl.rate # The four classical plots: par( mfrow=c(2,2) ) rateplot( bl.rate*10^6 ) # The labels on the vertical axis could be nicer: rateplot( bl.rate*10^6, at=10^(-1:3), labels=c(0.1,1,10,100,1000) ) # More bells an whistles par( mfrow=c(1,3), mar=c(3,3,1,1), oma=c(0,3,0,0), mgp=c(3,1,0)/1.6 ) rateplot( bl.rate*10^6, ylab="", ann=TRUE, which=c("AC","PA","CA"), at=10^(-1:3), labels=c(0.1,1,10,100,1000), col=topo.colors(11), cex.ann=1.2 )
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.