Plots temporal variation for different variables, typically pollutant
concentrations, across user-defined time scales. Multiple panels can be
shown, such as hour of the day, day of the week, week of the year, month of
the year, annual mean, or any other time-based grouping the user specifies.
By default, this function plots the diurnal, day of the week and monthly
variation for different variables, typically pollutant concentrations. Four
separate plots are produced. This is a convenient alternative to using
variationPlot() and assembling the plots manually.
Usage
timeVariation(
mydata,
pollutant = "nox",
panels = c("hour.weekday", "hour", "month", "weekday"),
local.tz = NULL,
normalise = FALSE,
xlab = NULL,
name.pol = NULL,
type = "default",
group = NULL,
difference = FALSE,
statistic = "mean",
conf.int = NULL,
B = 100,
ci = TRUE,
cols = "hue",
ref.y = NULL,
key = NULL,
key.columns = NULL,
key.position = "top",
panel.gap = 1.5,
auto.text = TRUE,
alpha = 0.4,
plot = TRUE,
...
)Arguments
- mydata
A data frame of time series. Must include a
datefield and at least one variable to plot.- pollutant
Name of variable to plot. Two or more pollutants can be plotted, in which case a form like
pollutant = c("nox", "co")should be used.- panels
A vector of character values which can be passed to
cutData(); used to define each panel in the plot. The first panel will take up the entire first row, and any remaining panels will make up the bottom row. If a single panel is given, it will take up the entire plotting area. Combining twotypestrings delimited with a full stop (e.g.,"hour.weekday") will use the first as the x-axis variable the second as a facet.- local.tz
Used for identifying whether a date has daylight savings time (DST) applied or not. Examples include
local.tz = "Europe/London",local.tz = "America/New_York", i.e., time zones that assume DST. https://en.wikipedia.org/wiki/List_of_zoneinfo_time_zones shows time zones that should be valid for most systems. It is important that the original data are in GMT (UTC) or a fixed offset from GMT.- normalise
Should variables be normalised? The default is
FALSE. IfTRUEthen the variable(s) are divided by their mean values. This helps to compare the shape of the diurnal trends for variables on very different scales.- xlab
x-axis label; one for each
panel. Defaults to the x-axis variable defined inpanels. Must be the same length aspanels.- name.pol
This option can be used to give alternative names for the variables plotted. Instead of taking the column headings as names, the user can supply replacements. For example, if a column had the name "nox" and the user wanted a different description, then setting
name.pol = "nox before change"can be used. If more than one pollutant is plotted then usece.g.name.pol = c("nox here", "o3 there").- type
typedetermines how the data are split i.e. conditioned, and then plotted. The default is will produce a single plot using the entire data. Type can be one of the built-in types as detailed incutData(), e.g.,"season","year","weekday"and so on. For example,type = "season"will produce four plots — one for each season.It is also possible to choose
typeas another variable in the data frame. If that variable is numeric, then the data will be split into four quantiles (if possible) and labelled accordingly. If type is an existing character or factor variable, then those categories/levels will be used directly. This offers great flexibility for understanding the variation of different variables and how they depend on one another.Only one
typeis allowed intimeVariation(), and it is applied to eachpanel. For additional splits, use the"x.type"syntax in thepanelsargument (e.g,panels = c("hour.weekday")).- group
This sets the grouping variable to be used. For example, if a data frame had a column
sitesettinggroup = "site"will plot all sites together in each panel. Passed tocutData().- difference
If two pollutants are chosen then setting
difference = TRUEwill also plot the difference in means between the two variables aspollutant[2] - pollutant[1]. Bootstrap 95\ difference in means are also calculated. A horizontal dashed line is shown at y = 0. The difference can also be calculated if there is a column that identifies two groups, e.g., having usedsplitByDate(). In this case it is possible to call the function with the optiongroup = "split.by"anddifference = TRUE.- statistic
Can be
"mean"(default) or"median". If the statistic is"mean"then the mean line and the 95% confidence interval in the mean are plotted by default. If the statistic is"median"then the median line is plotted together with the 5/95 and 25/75th quantiles are plotted. Users can control the confidence intervals withconf.int.- conf.int
The confidence intervals to be plotted. If
statistic = "mean"then the confidence intervals in the mean are plotted. Ifstatistic = "median"then theconf.intand1 - conf.intquantiles are plotted. Any number ofconf.ints can be provided.- B
Number of bootstrap replicates to use. Can be useful to reduce this value when there are a large number of observations available to increase the speed of the calculations without affecting the 95% confidence interval calculations by much.
- ci
Should confidence intervals be shown? The default is
TRUE. Setting this toFALSEcan be useful if multiple pollutants are chosen where over-lapping confidence intervals can over complicate plots.- cols
Colours to use for plotting. Can be a pre-set palette (e.g.,
"turbo","viridis","tol","Dark2", etc.) or a user-defined vector of R colours (e.g.,c("yellow", "green", "blue", "black")- seecolours()for a full list) or hex-codes (e.g.,c("#30123B", "#9CF649", "#7A0403")). Alternatively, can be a list of arguments to control the colour palette more closely (e.g.,palette,direction,alpha, etc.). SeeopenColours()andcolourOpts()for more details.- ref.y
Either a single value or values representing the y axis intercepts to draw lines, or a list such as that provided by
refOpts()to customise the colour/width/type/etc. of each line. SeerefOpts()for more details.- key
By default
timeVariation()produces four plots on one page. While it is useful to see these plots together, it is sometimes necessary just to use one for a report. IfkeyisTRUE, a key is added to all plots allowing the extraction of a single plot with key. IfkeyisFALSE, no key is shown for any plot.- key.columns
Number of columns to be used in a categorical legend. With many categories a single column can make to key too wide. The user can thus choose to use several columns by setting
key.columnsto be less than the number of categories.- key.position
Location where the legend is to be placed. Allowed arguments include
"top","right","bottom","left"and"none", the last of which removes the legend entirely.- panel.gap
The gap between panels in any split panel (e.g., the default
"hour.weekday"panel).- auto.text
Either
TRUE(default) orFALSE. IfTRUEtitles and axis labels will automatically try and format pollutant names and units properly, e.g., by subscripting the "2" in "NO2". Passed toquickText().- alpha
The alpha transparency used for plotting confidence intervals.
0is fully transparent and 1 is opaque. The default is0.4.- plot
When
openairplots are created they are automatically printed to the active graphics device.plot = FALSEdeactivates this behaviour. This may be useful when the plot data is of more interest, or the plot is required to appear later (e.g., later in a Quarto document, or to be saved to a file).- ...
Addition options are passed on to
cutData()fortypehandling. Some additional arguments are also available, varying somewhat in different plotting functions:title,subtitle,caption,tag,xlabandylabcontrol the plot title, subtitle, caption, tag, x-axis label and y-axis label, passed toggplot2::labs()viaquickText()ifauto.text = TRUE.xlim,ylimandlimitscontrol the limits of the x-axis, y-axis and colorbar scales.ncolandnrowset the number of columns and rows in a faceted plot.scalescan be"fixed","free_x","free_y"or"free"to control whether axes are shared across facets when usingtype. Also supported are the legacyx.relationandy.relation, which can be either"same"or"free"and get remapped toscalesautomatically.Similarly,
space,axes,axis.labels,switchandstrip.positioncan be used to customise the appearance of faceted plots. Seeggplot2::facet_wrap()andggplot2::facet_grid()for the arguments these take.fontsizeoverrides the overall font size of the plot by setting thetextargument ofggplot2::theme(). It may also be applied proportionately to anyopenairannotations (e.g., N/E/S/W labels on polar coordinate plots).Various graphical parameters are also supported:
linewidth,linetype,shape,size,border, andalpha. Not all parameters apply to all plots. These can take a single value, or a vector of multiple values - e.g.,shape = c(1, 2)- which will be recycled to the length of values needed.lineend,linejoinandlinemitretweak the appearance of line plots; seeggplot2::geom_line()for more information.In polar coordinate plots,
annotate = FALSEwill remove the N/E/S/W labels and any other annotations.
Value
an openair object. The components of
timeVariation() are named after panels. main.plot is a
patchwork assembly.
Details
The variation of pollutant concentrations by time can reveal many interesting features that relate to source types and meteorology. For traffic sources, there are often important differences in the way vehicles vary by type - e.g., fewer heavy vehicles at weekends.
Users can supply their own ylim, e.g. ylim = c(0, 200), which will be
used for all plots. Alternatively, ylim can be a list equal to the length
of panels to control y-limits for each individual panel, e.g. ylim = list(c(-100,500), c(200, 300), c(-400,400), c(50,70)).
Note also that the timeVariation() function works well on a subset of data
and in conjunction with other plots. For example, a polarPlot() may
highlight an interesting feature for a particular wind speed/direction range.
By filtering for those conditions timeVariation() can help determine
whether the temporal variation of that feature differs from other features
— and help with source identification.
See also
Other time series and trend functions:
TheilSen(),
calendarPlot(),
smoothTrend(),
timePlot(),
timeProp()
