Functions for plotting the evolution of epidemics. The plot methods for classes "epidata" and "summary.epidata" plots the numbers of susceptible, infectious and recovered (= removed) individuals by step functions along the time axis. The function stateplot shows individual state changes along the time axis.

# S3 method for summary.epidata
     lty = c(2, 1, 3), lwd = 2,
     col = c("#1B9E77", "#D95F02", "#7570B3"), col.hor = col, col.vert = col,
     xlab = "Time", ylab = "Number of individuals",
     xlim = NULL, ylim = NULL, legend.opts = list(), do.axis4 = NULL,
     panel.first = grid(), rug.opts = list(),
     which.rug = c("infections", "removals", "susceptibility", "all"), ...)
# S3 method for epidata
plot(x, ...)

stateplot(x, id, ...)



an object inheriting from class "epidata" or "summary.epidata". In the former case, its summary is calculated and the function continues as in the latter case. The plot method for class "epidata" is a simple wrapper for plot.summary.epidata implemented as plot(summary(x, ...)).

lty, lwd

vectors of length 3 containing the line types and widths, respectively, for the numbers of susceptible, infectious and removed individuals (in this order). By default, all lines have width 1 and the line types are dashed (susceptible), solid (infectious) and dotted (removed), respectively. To omit the drawing of a specific line, just set the corresponding entry in lty to 0. The vectors are recycled if necessary. For information about the different lty and lwd codes, see the help pages of par.

col, col.hor, col.vert

vectors of length 3 containing the line colors for the numbers of susceptible, infectious and removed individuals (in this order). col.hor defines the color for the horizontal parts of the step function, whilst col.vert defines the color for its vertical parts. The argument col is just short for col.hor = col and col.vert = col. The default col vector corresponds to brewer.pal("Dark2",n=3) from the RColorBrewer package. The vectors are recycled if necessary. For information about the possible values of col, see the help pages of par.

xlab, ylab

axis labels, default to "Time" and "Number of individuals", respectively.

xlim, ylim

the x and y limits of the plot in the form c(xmin, xmax) and c(ymin, ymax), respectively. By default, these are chosen adequately to fit the time range of the epidemic and the number of individuals.


if this is a list (of arguments for the legend function), a legend will be plotted. The defaults are as follows:






c("susceptible", "infectious", "removed")


same as the arguments lty, lwd, and col.hor of the main function




logical indicating if the final numbers of susceptible and removed individuals should be indicated on the right axis. The default NULL means TRUE, if x represents a SIR epidemic and FALSE otherwise, i.e. if the epidemic is SI, SIS or SIRS.


an expression to be evaluated after the plot axes are set up but before any plotting takes place. By default, a standard grid is drawn.


either a list of arguments passed to the function rug or NULL (or NA), in which case no rug will be plotted. By default, the argument ticksize is set to 0.02, col is set to the color according to which.rug (black if this is "all"), and quiet is set to TRUE. Note that the argument x, which contains the locations for the rug is fixed internally and can not be modified. The argument which.rug (see below) determines the locations to mark.


By default, tick marks are drawn at the time points of infections. Alternatively, one can choose to mark only "removals", "susceptibilities" (i.e. state change from R to S) or "all" events.


single character string or factor of length 1 specifying the individual for which the stateplot should be established.


For plot.summary.epidata: further graphical parameters passed to plot, lines and axis, e.g. main, las, cex.axis (etc.) and mgp.
For plot.epidata: arguments passed to plot.summary.epidata.
For stateplot: arguments passed to plot.stepfun or plot.function (if id had no events during the observation period). By default, xlab="time", ylab="state", xlim=attr(x,"timeRange"), xaxs="i" and do.points=FALSE.


plot.summary.epidata (and plot.epidata) invisibly returns the matrix used for plotting, which contains the evolution of the three counters.
stateplot invisibly returns the function, which was plotted, typically of class "stepfun", but maybe of class "function", if no events have been observed for the individual in question (then the function always returns the initial state). The vertical axis of stateplot can range from 1 to 3, where 1 corresponds to Susceptible, 2 to Infectious and 3 to Removed.


Sebastian Meyer

See also

summary.epidata for the data, on which the plots are based. animate.epidata for the animation of epidemics.


(s <- summary(hagelloch))

# rudimentary stateplot
stateplot(s, id = "187")

# evolution of the epidemic