Changelog
Source:NEWS.md
openair (development version)
New Features
-
The
source
argument ofimportUKAQ()
now defaults toNULL
. This option allows the function to assign thesource
of eachsite
itself, with some caveats:Ambiguous codes (e.g.,
"AD1"
, which corresponds to a SAQN and locally managed site) will preferentially import from the national networks (AURN, then AQE/SAQN/WAQN/NIAQN) over locally-managed networks. To override this users should manually definesource
.Incorrect codes not found in
importMeta()
will error ifimportUKAQ()
is left to assign thesource
.When
data_type
is one of the aggregate types (e.g.,"annual"
) and asite
isn’t defined, asource
must be provided.It is likely slightly slower for the function to assign
source
itself than for users to specify it themselves.
-
Added new features for
openColours()
:Added new qualitative colour palettes: the “tol” family are colour-blind friendly palettes based on the work of Paul Tol (https://personal.sron.nl/~pault/), and “tableau” and “observable” provide access to the “Tableau10” and “Observable10” palettes to aid in consistency with plots made in those platforms.
When
n
isn’t defined for a qualitative palette (e.g., “Dark2”), the full qualitative palette will be returned. Previously this errored with the default of100
.openColours()
will now check whether the providedscheme
is either a known scheme name or a vector of valid R colours, and provide an informative error if this is not the case.
The
formula.label
argument ofpolarPlot()
will now control whether concentration information is printed whenstatistic = "cpf"
.add
calm.thresh
as an option towindRose
. This change allows users to set a non-zero wind speed threshold that is considered as calm.DAQI information imported using
importUKAQ(data_type = "daqi")
will be returned with the relevant DAQI band appended as an additional factor column; either “Low” (1-3), “Moderate” (4-6), “High” (7-9), or “Very High” (10). See https://uk-air.defra.gov.uk/air-pollution/daqi for more information.
Bug fixes
Fixed an issue wherein
importUKAQ()
would drop sites if importing fromlocal
sites and another network.polarCluster()
will no longer error with multiplepollutant
s and a singlen.clusters
.importUKAQ()
will correctly append site meta data whenmeta = TRUE
,source
is a length greater than 1, and a single site is repeated in more than one source (e.g.,importUKAQ(source = c("waqn", "aurn"), data_type = "daqi", year = 2024L))
)
openair 2.18-2
CRAN release: 2024-03-11
New Features
- add option to
corPlot()
to carry through “use” option incor
.
Bug fixes
- fix date formatting issue in
aqStats()
. - fix wrong formula for Euclidian distances in
trajCluster()
that did not transform coordinates before distance matrix was calculated. Thanks to Dan Jaffe. - “15_min” can once again be used as a
data_type
in theimportUKAQ()
family. -
importUKAQ()
can now be used to import annual, monthly, and DAQI statistics for multiple combinations ofsource
andyear
.
openair 2.18-0
CRAN release: 2023-10-09
New Features
-
added a new
importUKAQ()
function, which supersedesimportAURN()
,importAQE()
,importWAQN()
,importSAQN()
,importNI()
andimportLocal()
.importUKAQ()
brings a lot of new functionality to accessing UK air quality data through openair.importUKAQ()
has all of the same arguments as the functions it supersedes, as well as “source” to define the specific network of interest. The “source” argument can either be of length 1 or equal to the length of the “site” argument. This means thatimportUKAQ()
can import statistics from multiple different networks at once.importUKAQ()
allowsratified = TRUE
andto_narrow = TRUE
simultaneously. This will return a tibble with two columns per observation - “value” containing the concentration and “qc” containingTRUE
/FALSE
which indicates whether the concentration is validated.The AQE, WAQN, SAQN and NI networks now allow for
data_type = "daqi"
. At time of writing, only data from 2022 is present.the
site
andpollutant
arguments ofimportUKAQ()
are respected whendata_type
is “daqi”, “annual” or “monthly”. The default behaviour to return all available statistics has not changed. (#346)the various arguments which augment import function outputs now behave more consistently with one another. For example,
ratified
now respectspollutant
and only returns the “_qc” columns for the pollutants of interest.importAURN()
,importAQE()
,importWAQN()
,importSAQN()
,importNI()
andimportLocal()
are still exported by openair. These are all simply wrappers aroundimportUKAQ()
with forced “source” arguments, and remain for back-compatibility and convenience.While
importKCL()
also imports UK air quality data, it is not currently made available throughimportUKAQ()
. Users should continue to import KCL data viaimportKCL()
for the time being.
-
importMeta()
has gained two new “source” options to assist with the newimportUKAQ()
function:source = "ukaq"
will return metadata for all of the “UKAQ” networks.source = "all"
will return all available metadata (including KCL and Europe).
new function
runRegression()
for extracting ‘dilution lines’ from air quality and other data. Online manual will be updated with principles and examples.calendarPlot()
now automatically creates its ownlabels
ifbreaks
are specified. For example,c(0, 10, 20)
will create the labelsc("0 - 10", "10 - 20")
.labels
can still be used to override the default values. (#341)Added the
w.abbr.len
argument tocalendarPlot()
which controls the length of the weekday abbreviation. This was requested to help people using written Chinese, but will be more broadly useful (e.g., to use “Mon”, “Tue”, “Wed” in place of “M”, “T”, “W”). (#101)return tibble from
timeAverage()
.add option
panel.gap
to leave space between panels intimeAverage
day-hour plots. Set to 0 for previous behaviour.Move regression formula off main plot for
polarPlot()
for clarity and label slope as ‘m’.Tweak seasonal trend decomposition using STL to allow the seasonal amplitude to vary more. Affects
smoothTrend()
andTheilSen()
.Added colours recommended by the UK Government Analysis Function (https://analysisfunction.civilservice.gov.uk/policy-store/data-visualisation-colours-in-charts/) to
openColours()
.polarCluster
now prints the cluster contributions and returns a data frame of them in the output.
Bug Fixes
The order of columns in
importUKAQ()
will remain consistent (metadata, date, pollutants, meteo) regardless of whetherhc
isTRUE
orFALSE
.quickText()
will now automatically capitalise “no” to “NO”. (#343)The
year
argument ofimportMeta()
is now respected whensource = "kcl"
and"europe"
.Several of the directional analysis plot family (e.g.,
polarFreq()
) have been refactored to useis.null()
oris.na()
overmissing()
. While predominantly an internal change, this should be make these functions easier to use inside of other functions (e.g.,function(data, breaks = NA) polarFreq(data, breaks = breaks))
will now run successfully).For
calendarPlot
when annotated with ws or wd arrows, use max ws/wd that corresponds to hour of maximum pollutant concentration and not simple the max ws/wd for a day.summaryPlot()
no longer forces time zones to be GMT. (#356)
openair 2.17-0
CRAN release: 2023-05-02
New Features
add option
meteo
toimportAURN()
family of functions. By default modelled wind speed, direction and ambient temperature are returned if available, but not ifmeteo = FALSE
.added a new column to
modStats()
, “P”, which represents the P-value of the correlation as reported bycor.test()
.update processing of ADMS meteorological (.MOP) files to return stability and tidier data.
refined the output of
pollutionRose()
where thews2
andwd2
options are provided; instead of the misleading N/E/S/W, the markers become 0, +90, +/-180, -90.the
timeAverage()
progress bar is now powered by cli/purrr and can be silenced using the newprogress
argument.the
polarCluster()
progress bar is now also powered by cli/purrr.colours corresponding to the UK daily air quality index (https://uk-air.defra.gov.uk/air-pollution/daqi) have been added as options to
openColours()
.the openair object’s
data
property returned by thetrajLevel()
function is now consistently formatted regardless ofstatistic
choice, and contains relevant statistic-specific information (e.g.,sigma
for"SQTBA"
).
Bug Fixes
fixed issue with
modStats()
such that “method” can now be changed (e.g., to “spearman”).fixed issue with
aqStats()
where output wasn’t being properly split by pollutant/type.fixed issue with
conditionalQuantile()
where the plot would fail to be produced when “type” was not specified.fixed issue with
cutData()
where “season” wouldn’t respect system locale (e.g., would still show “(DJF)” on Italian systems, instead of the correct “(gla)”). Note that the season name itself (e.g., “Winter”) cannot be automatically converted.fixed the
theilSen()
silent
argument. The message “taking bootstrap samples. please wait” is also now sent viamessage()
rather thanprint()
and only appears once per function call.fixed issue where
trajCluster()
proportions would overlap when clustering forward trajectories. Proportions should now appear at the end of cluster paths, regardless of whether the trajectory is back or forward.fixed issue where not all openair plotting functions would properly return an openair S3 object, and that not all
data
objects were tibbles.Fixed issue with
timeAverage()
where date formatting caused problems, possibly due to latest version of R (4.3.0).
openair 2.15
CRAN release: 2023-02-06
do not use native pipe yet - does not work with old versions of R
fix issue with
polarDiff()
where the resultingopenair
object did not contain theplot
element.
openair 2.14
CRAN release: 2023-01-25
add
year
as an option toimportMeta
. This allows the user to select sites that were only open at some point in the chosen year or duration of years.make sure full daily gravimetric data are returned for PM10 and PM2.5 if available when using
importAURN
family of functions. These data will be returned asgr_pm2.5
andgr_pm10
ifdata_type = "daily"
add
alpha
argument to all polar directional analysis functions. This is mainly for use inopenairmaps
but may be of general interest for specific use cases.fix small bug in
smoothTrend
in returned fit data when data is missing.
openair 2.13
CRAN release: 2023-01-06
- add
importLocal
to access locally-managed automatic monitoring data - fix bug in
pollutionRose
when single number of breaks given (was ignored) - remove legacy functions
import
,import.2
,importAURNcsv
andkernelExceed
openair 2.11
CRAN release: 2022-09-25
- add
sigma
to options for SQTBA trajectory analysis for control over plume spread assumptions; set to 1.5 km (in one hour) - fix bug introduced in
timeAverage
for multi-time period averages - fix bug in
timeProp
and simplify code
openair 2.10
- add Daily Air Quality Index (DAQI) to
importAURN
asdata_type
. - add rolling 8 and 24 hour statistics to
importAURN
family asdata_type
. - use https on importing meta data in
importMeta
- fix
calendarPlot
issue when there are gaps between selected months e.g.month = c(1, 2, 12)
- fix warning message in
calendarPlot
- don’t pad missing dates in
timeAverage
if DST - deprecate
resolution
inpolarPlot
— now uses predictions at a coarser resolution that are interpolated. Will also speed-up plotting - add new source method to trajectory analysis (
trajlevel
), SQTBA — Simplified Quantitative Transport Bias Analysis - fix bivariate Gaussian function in
polarPlot
when two pollutants supplied for different statistics - add initial version of ‘York regression’ approach as an option to
polarPlot
. This regression approach determines a best fit line when there is error in the ‘x’ and the ‘y’. The openair book will be updated to cover this in more detail.
openair 2.9-1
CRAN release: 2022-03-30
- Do not return hydrocarbon measurements by default for annual and monthly summaries in
importAURN
. - fix issue with class of date-time object for importing some air quality data e.g.
importAURN
. - refine default grid lines in
windRose
andpollutionRose
.
openair 2.9-0
CRAN release: 2022-03-22
- add option to
TaylorDiagram
for annotation of observed data. - fix issue with
timevariation
whendifference = TRUE
- fix
trajCluster
issue to do withdplyr
- access other time-averaged air quality data using
importAURN
,importSAQN
,importWAQN
,importAQE
andimportNI
. New optiondata_type
, which can be “hourly” (default), “annual”, “monthly”, “daily” and “15min” (for SO2). These new data sources should make it much easier to work with long-term time series with many sites. See the openair manual for more details. - fix terrible spelling in
selectRunning
.
openair 2.8-6
CRAN release: 2021-11-22
- fix annotation bug when comparing two data sets in
windRose
- enhance
selectRunning
. Now returns full data frame with a new condition column. - make sure “hemisphere” argument goes to type “monthyear” and “yearmonth”
- argument
month
not passed incalendarPlot
openair 2.8-4
CRAN release: 2021-09-15
- fix bug in
windRose
where whole period is calm - add optimisation to
polarCluster
to speed up clustering through optionpamonce = 3
. This should not appreciably affect results. - fix strange bug in
aqStats
due tolubridate
time zone issue. - fix bug in
TaylorDiagram
when group was present. - Do not convert times with Daylight Saving Time when checking data — just report presence.
- add option
plot.type
tosummaryPlot
to change line style; most useful for vertical lines in time series withplot.type = "h"
openair 2.8-0
- New function
polarDiff
to consider the difference surface between two polar plots. - Modify
polarCluster
to consider clustering of differences in polar plot surfaces. - Fix user annotation in
windRose
and pass on option for number of significant figures used to annotate plots (dig.lab
)
openair 2.7-6
- fix bug with
percentileRose
whenstatistic = "cpf"
and multiple pollutants - fix bug in
timeAverage
whentype = "season"
andavg.time = "season"
- add
week
to openair default types - fix bug in
timeVariation
when considering difference plots with missing data - fix CRAN check when using
return
openair 2.7-4
- add ambient temperature (
air_temp
) to meteorological variables returned fromimportAURN
,importSAQN
andimportWAQN
(using WRF model). - re-format date returned in
importAQE
due to strangedplyr
join issues - add
statistic = "Spearman"
topolarPlot
as an option when considering two pollutants. - add
method
option tocorPlot
to allow different correlation methods (“pearson”, “spearman” or “kendall”) - re-factor all UK air quality data import functions i.e.
importAURN
,importSAQN
,importWAQN
,importAQE
. - Add
importNI
to import data from Northern Ireland. - Add option to UK air quality import functions to return information on whether individual pollutants have been quality-assured using option
ratified
. These functions includeimportAURN
,importSAQN
,importWAQN
,importAQE
andimportNI
- Clean up what is returned from
importMeta
- Return air quality data site name and code as character rather than factor
openair 2.7-2
- fix tibble recycling issue
- fix shading issue in lowest percentile range in
percentileRose
. - fix strange bug in
importWAQN
that would intermittently fail; sometimes crashing R. - add option
date.format
toTheilSen
.
openair 2.7-0
- fix
calendarPlot
slowness on MacOS - Refine use of Gaussian kernels when two pollutant statistics are considered in
polarPlot
- Add option
statistic = "nwr"
inpolarPlot
that implements the Non-parametric Wind Regression based on Henry et al. (2009). Theopenair
implementation is not identical but should yield similar results. - NEW
importAQE
function to import data from Air Quality England sites. - NEW
importEurope
to provide access to some the data from thesaqgetr
package.
openair 2.6-6
- fix bug in
TheilSen
when no missing data anddeseason = TRUE
- fix bug in
timeAverage
when interval padding dates and date is “Date” class and not “POSIXct” - fix example for
trajCluster
, should ben.cluster
notn.clusters
- fix issue with DST in
cutData
- allow ‘hemisphere’ to be supplied as an argument to
timeAverage
, used for avg.time = “season”. - add option
to_narrow
toimportAURN
,importSAQN
,importKCL
andimportWAQN
to stack data into a tidy format. The data are now returned as a ‘tibble’ - Allow meta data to be returned in
importSAQN
andimportWAQN
.
openair 2.6-4
- fix issue with
TheilSen
when conditioning and < 6 annual measurements - remove arrow heads in
polarPlot
axes. - Use a Kalman filter and Kalman smooth to impute missing monthly means when
deseason = TRUE
insmoothTrend
andTheilSen
. This replaces simple linear interpolation. - fix bug in
smoothTrend
whenci = FALSE
(no smooth was fitted). - Add
importWAQN
to access data from the Welsh air quality network. - Add “waqn” as a data source to
importMeta
.
openair 2.6-0
- In
aqStats
use defaultdata.thresh = 0
rather than 75% to ensure summaries are calculated - Fix confidence intervals in
timeVariation
when statistic - “median”. Revision will result in narrower range. - Change default in
corPlot
to plot lower and upper triangles; addlower
as an option. - Update meta data for Scottish Air Quality Network (“saqn”); was badly out of date
- fix bug in
timeAverage
when interval more than one time unit e.g. “10 day”
openair 2.5-0
- add simple versions of viridis colour palettes: “viridis”, “plasma”, “magma”, “inferno” and “cividis” e.g.
polarPlot(mydata, cols = "plasma")
- allow option
align
to be used inaqStats
to determine how rolling means are calculated. Can take the values “centre” (default), “left” and “right”. - make sure full year present in
importAURN
- fix issue with multiple pollutants in
polarAnnulus
- fix issues in trajectory functions due to
dplyr
.
openair 2.4-0
- use
lubridate
intimeAverage
to improve speed / simplicity - make sure all strip colours are white for
openair
objects - fix bug in
polarPlot
whenstatistic = "cpf"
when using tibbles - fix bug in
polarCluster
with exported data (date was not correctly merged to produce single date column) - convert internal
mydata
to a ‘tibble’ for easier printing. - allow
npoints = NA
intrajPlot
to suppress plotting of interval points. - fix bias correction bug in
windRose
when ws/wd have different names - fix bug in
timeAverage
for wind direction (wd
) whenstatistic = "data.cap"
- New built-in colour palette for the colour blind “cbPalette”. Note maximum number of colours is 8 e.g.
windRose(mydata, col = "cbPalette", breaks = 6)
. Thanks to Jerry Martin.
openair 2.3-0
- add option
plot
toTheilSen
.FALSE
can be useful when analysing data to extract the trend components and plot in other ways and when theTheilSen
plot is not required. - add option
silent
toTheilSen
to avoid printing updates to trend fitting. By default it isFALSE
. - fix wrong ordering of names in
timeVariation
when more than one pollutant - fix date parsing issues in
selectByDate
. - fix wrong ordering in
timePlot
- allow
calendarPlot
to span any time period. The function can now straddle parts of two years or several years. - add option
col.arrow
tocalendarPlot
to control colour of the wind speed / direction annotation arrows.
openair 2.2-3
CRAN release: 2018-02-26
Main changes
- refine
selectByDate
due to changes inlubridate
- fix issue with
importSAQN
when no data - remove site information from help of
importAURN
and point users toimportMeta
- fixed bug in
scatterPlot
whenmethod = "level"
due to NSE - use
tidyr
in place ofreshape2
- remove dependency of
plyr
andreshape2
- fix bug in
percentileRose
formethod = "cpf"
with multiple pollutants
openair 2.1-5
CRAN release: 2017-08-31
Main changes
- change
polarCluster
resolution to “normal” rather than “fine” to speed up. - fix regression when fitting smooth using
trajLevel
- remove all Airbase functions, will be available via new package that also incorporates newer e-reporting data
- fix bug in
timeAverage
whenstatistic = "sum"
and all data in period was missing (would return 0 rather thanNA
) - make sure that same data used in all
conditionalEval
plots by using data where there are no missing data for all variables used. This is more important ofvar.obs
andvar.mod
are supplied and hence additional variables are considered relative to onlyobs
andmod
. - fix date issues in
calendarPlot
to do with time zones - remove missing data when type is a numeric value split up into quantiles
- fix bug in
windRose
/pollutionRose
when two conditioning variables were given (problem in bias correction)
openair 2.1-0
CRAN release: 2017-04-12
Main changes
- add
angle
option topercentileRose
to allow wind direction averages for sectors >10 degrees. - fix bug in
aqStats
if only a few lines of data - allow
statistic
to equal “mean”, “median” or “frequency” inscatterPlot
, whenmethod = "level"
- change smoothing in
scatterPlot
whenmethod = "level"
to use tensor interaction to allow for better smoothing when x and y are on different scales. - warn when >10% negative data detected in
polarPlot
and suggest settingforce.postive = FALSE
- make
maps
Suggests rather than Depends - refine check on whether bias correction is needed in
windRose
- still plot data when <6 points in
TheilSen
and when no trend information is given - New function
binData
to easily summarise mean and 95% confidence intervals for intervals of a variable - Export
bootMeanDF
, used to calculate the bootstrap uncertainty in the mean of a vector.
openair 2.0-0
CRAN release: 2016-11-23
Main changes
- silence download progress by default in
importAURN
- update
polarPlot
to work with pairwise statistics to compare two pollutants. The function can consider Pearson correlation and slopes from ordinary linear regression, robust regression (using MASS functionrlm
) and quantile regression (requires the quantreg package to be installed). See open access version of the paper. - change default
polarPlot
plot resolution to “fine”. - fix
windRose
problem with some data due to missing data - move
mapdata
package to Suggests - add option to return meta data (site type, lat, lon) from
importAURN
andimportKCL
. - fix statistic = “weighted.mean” issue in
polarPlot
. - make sure
y.relation
is used when there is no grouping intimePlot
. To retain the behaviour of earlier versions userelation = "free"
- fix issue with
type
when used withtimeProp
- fix bias correction when not default type in
windRose
- fix pch colour bug in
timePlot
- add option
alpha
topolarPlot
to control transparency of plotted surface. Mostly useful for overlaying polar plots on leaflet maps (see openairmaps package) - enhance
grid.line
option inwindRose
so that users can control grid spacing, line type and line colour
openair 1.9-9
Main changes
- correct citation information
- Now depends on R version of >= 3.2.0 so that
download.file
can uselibcurl
for access to https (used inimportAURN
) - add
avg.time
option tosummaryPlot
to control the averaging times of the time series lines andprint.datacap
to control whether the data capture % is shown for each interval. - fix bug in
selectByDate
where a day number would not work - remove arrows in
windRose
,polarPlot
to avoid ambiguous interpretation of wind direction - add
key.position
option totimePlot
to control the location of the key. - fix labels in
timeVariation
when data for some types is missing. - fix
trendLevel
issue due todplyr
- use
lubridate
package intimeAverage
- fix bug in
summaryPlot
related todplyr
use (would not plot missing data correctly) - better handling of precision in
windRose
mean and statistics returned in data (thanks to Dr Ulrich Quass) - fix bug in
importKCL
when incomplete time series (would drop site code and site name) - fix bug in
pollutionRose
due to issue with calms - fix bug in
smoothTrend
where model uncertainties were not returned - fix bug in
summaryPlot
where missing data would not be shown correctly when date was not ordered in sequence - fix annotation in
windRose
when comparing two data sets -
GoogleMapsPlot
is deprecated and will be replaced with a better function.
openair 1.8-6
CRAN release: 2016-06-15
- Only plot lower triangle for
corPlot
- make sure date class is POSIXct, POSIXt in
importAURN
- fix problem in
importMeta
for AURN - change in database source format - fix
pollutionRose
plot warning - fix NMB in
modStats
- fix bug in
timeAverage
where estimating the time interval in input data could be unreliable due to low data availability - fix time expansion bug in
timeAverage
- add new
type
“yearseason” (or “seasonyear”). This will split data by every year / season combination, making sure the seasons are contiguous. For example, in winter in the northern hemisphere December 2010 will be considered part of winter 2011, rather than winter 2010. Thanks to Ralf Weisse for the suggestion. - fix download issues with
importAURN
andimportMeta
when users are within an organisational network. Problems likely due to move from http to https and SSL Certificates. - fix
TheilSen
bug when two types.
openair 1.8-2
CRAN release: 2016-04-25
- fixes for new version of
dplyr
- adjust legends in
conditionalEval
to avoid plot error. - fix problem on linux and simplify
importAURN
- update
importAURN
meta data in help function.
openair 1.8-0
CRAN release: 2016-03-24
- Allow
scatterPlot
to have control over plot symbol fill and colour (for symbols 21 to 25). Usecols
andfill
to control. -
scatterPlot
can now fit more than one linear equation when there is a grouping variable - give message when using a users’ own
type
such as month, year etc. - fix ordering of bars on
timeProp
, removebox.width
option - fix bug introduced in 1.7-4 that affected
windRose
bias correction (thanks to Eric Christensen) - Add option for
statistic = "r"
inpolarPlot
for comparing polar plot correlation surfaces between two pollutants using Gaussian kernel weighting. - fix bug in
type = "daylight"
when time zone not UTC. - remove
cutDaylight
as a separate function (cutData
works for everything) - add
w.shift
option tocalendarPlot
to control the first day of the week and subsequent order (thanks to Giovanni Bonafè)
openair 1.7.3
- Fix regression in
timeAverage
when expanding time series - Remove
dplyr
warnings inTheilSen
- Keep season order correct when averaging time is season and
type = "season"
inTheilSen
andsmoothTrend
- add origin marker to
trajCluster
- better date padding when >1 type
- fix some
dplyr
bugs where some functions would fail with two types - return data frame of cluster information in
trajCluster
openair 1.7
CRAN release: 2016-02-22
- Allow
linearRelation
to use any arbitrary time averaging period. - don’t add line to monthly plot in
timeVariation
when group = “season” - fix
NA
factors intrajPlot
- make border black when using maps for improved clarity
- fix bug in
trajPlot
that sometimes failed to print map when grouping - add percentage total trajectories for
trajCluster
and optionby.type
- don’t touch existing date-based types in
cutData
- refine date checks
- speed up
timeAverage
- new dependent package
lubridate
for easier / faster date-time manipulations - fix slow
timeProp
(latticepanel.barchart
is very slow) - only remove missing wind speed in
windRose
(wd can beNA
and ws zero i.e. calm) - correct order of labels in
timeVariation
whendifference = TRUE
for some factor levels (were in alphabetical)
openair 1.6.6
- Not all labels shown if >25 in
trendLevel
; make sure strip is white - correct bug in
timeVariation
(vector.ws
did not work) - fix some cases where background strip was not white
openair 1.6.5
CRAN release: 2015-11-04
- changes to fix examples not run during the R CMD check
- make
TaylorDiagram
more flexible when using two groups and the second is date-based
openair 1.6.4
CRAN release: 2015-10-23
- fix bug in
GoogleMapsPlot
when pollutant not given - don’t clutter up working directory with
GoogleMapsPlot
; write to temporary file instead - fix bug when trying to access multiple sites with no data in
- fix problem with multiple sites in
aqStats
-
TheilSen
should always give trend in units/year (would use xlab if supplied) - fix
cutData
bug where quantile cuts are made - don’t remove missing data in
scatterPlot
so that factors with no data still shown -
TheilSen
should always give trend in units/year (would use xlab if supplied) - New option
slope.text
inTheilSen
to allow users to add their own text i.e. not the default “units/year” - refine check on DST
- Always report data capture % in
aqStats
openair 1.6
CRAN release: 2015-07-23
- Don’t force integer results for
importAURN
- fix bug with
period = "months"
insummaryPlot
- allow linear fit with
method = "hexbin"
inscatterPlot
- allow users to define own map limits in trajectory functions and better scaled map grids
- fix renaming bug in
airbaseStats
- bug in
windRose
when all calm - date bug fixes in
scatterPlot
- add option
windflow
toscatterPlot
andtimePlot
to allow wind flow plots - suppress harmless warnings in
smoothTrend
- fix bug in some functions when type more than one
- add support in
pollutionRose
for optionnormalise
to show probability by wind sector (0 to 1). -
timeAverage
now has an optiontype
similar to other functions. A common use would be to applytimeAverage
to a data frame with multiple sites where there is a column representing site name e.g.type = "site"
. - Add receptor location for trajectory plots
trajLevel
andtrajPlot
. - Add an option
trend
toTheilSen
to control how the trend lines are drawn. - fix bug in
calendarPlot
when partial month available - fix bug in
calendarPlot
, don’t need to cut data first - add
npoints
option totrajPlot
to control time spacing of dots shown on back trajectories - don’t include missing data when
statistic = "frequency
intimeAverage
- fix bug in
timeProp
due to point above - fix bug in
timeVariation
withtype = "season"
when space in pollutant name
openair 1.5
CRAN release: 2015-04-14
- Add ‘days’ as a time unit to
summaryPlot
- useful for shorter time series - Initial changes to use
dplyr
to speed up some of the code e.g.timeAverage
- Automate
x.inc
andy.inc
if not supplied by user inscatterPlot
- Fix regression in
trajLevel
frequency calculation - Fix a few problems with trajectory plotting - some methods would fail given recent updates
- Make trajectory gridded analysis faster
- Fix bug in
importMeta
introduced since usingdplyr
- Add
angle.scale
towindRose
to control placement of radial scale (helps to avoid clash with wind rose paddles) - Fix bug in
timePlot
whenavg.time
given (regression) - Allow
TaylorDiagram
to havegroup
of length two. This will show all group combinations but will only differentiate them by colour/symbol according to the first grouping variable. -
timeVariation
can now take aylim
list to control the y-limits on each individual plot - For trajectory plotting allow
map.res
to be “state” to show the US States. - Fix bug in
importKCL
when date was not at beginning of the year
in openair 1.1-2
- Fix regression for openair methods e.g. affected plot method for
timeVariation
subsets - Check data are numeric before applying running mean (would crash R if not)
- Begin transition to Github, more details to follow
- Add option dist to
scatterPlot
for surface modelling - Sort out package dependencies etc. to make maps easier to load
- Add fontsize option to all openair plot functions
- Change contact details, fix citation problem
- Make sure
importKCL
is file of full year - Fix warning messages in
aqStats
when multiple pollutants selected
openair 1.1
- Add ref.y option to
timeVariation
for y references line(s) - Fix type = “wd” labelling to
corPlot
- Refine airbaseStats to include site type and city by default
- Make trendLevel colour scaling consistent with other functions and allow missing data to be shown in different colour
- Allow categorical scales in trendLevel
- Fix type = ‘season’ in
trajLevel
(winter period not properly calculated) - Allow multiple reference lines to be added to
timePlot
,scatterPlot
,timeVariation
and add tosmoothTrend
together with full control of their properties. Note - ref.x and ref.y must now be lists; see help file for details. - Don’t open graphics window in aqStats
- Add more flexibility to
timeAverage
for irregular time intervals - Add 12-hour interval points on back trajectory lines
- Fix bug in
percentileRose
with stat = “cpf” and non-default type (now uses single percentile based on all data, not each panel) - Check if date is in POSIXt format and throw error if TRUE
- Improve date checks in selectByDate
- Add dendrogram option to
corPlot
(thanks to James Durant for the suggestion) - Remove strip in
corPlot
when type = “default” - Remove statistic description in
pollutionRose
when annotate = FALSE. - Fix colour scaling bug in
scatterPlot
/trajPlot
when user limits supplied - Check period = “years” or “months” in
summaryPlot
; some users supplied “year” resulting in incorrect statistics - Give mean and percent calm in
pollutionRose
when statistic = “prop.mean” (was erroneously percentage) - getMet function for downloading Hysplit met files in manual did not download as binary files; now corrected
- Add name.pol argument to
smoothTrend
for more control over names used for plotting - Show first few dates when import fails to apply correct date format (helps to provide a clue as to actual date format)
- Updates to trajectory plots to allow for different map projections using the mapproj package (new dependency)
- Fix trajectory frequency calculation - underestimated frequencies.
openair 1.0-0
- Pass all arguments in
corPlot
- Enhance
timeVariation
to consider median + quantiles through option ‘statistic’ - Do not remove NA results from modStats
- Better scaling in polarCluster; consistent with
polarPlot
- Fix
importKCL
where dates were filled if two non contiguous years were chosen - Refine scaling of ws in
polarPlot
when upper is set - Fix bug when type = “weekday” but not all days of the week are present
- Add annotate option to TaylorDiagram
- Allow modStat statistics to be chosen by user and add Index of Agreement
- Needs to be >24 months to deseason in
smoothTrend
/TheilSen
(was >=) - Refine names returned by importADMS when used with .pst file
- Fix trajectory code in appendix D in the manual (some function arguments were not passed)
- Better user defined limits scaling in
polarPlot
,scatterPlot
, polarAnnulus when limits within data range - Clarify time zone for importing data to openair and checking (see manual for details)
- Initial versions of functions to import EEA airbase data - see newsletter/manual for details
- Better treatment of daylight saving time in cutData,
timeVariation
and polarAnnulus (allow any local time zone to be used; was just GMT/BST before) - Remove existing date-based columns in cutData to ensure date is used instead
- Allow users to shade/not shade alternate years in
smoothTrend
andTheilSen
- Do not smooth
percentileRose
by wind direction by default. - Add option ‘wd’ to
percentileRose
- Fix
trajPlot
bug when trajectory data was not at 3-hour intervals - Return data and smooth fit information in
smoothTrend
openair 0.9-0
CRAN release: 2013-11-12
- Fix bug introduced in 0.8-0 for
scatterPlot
surfaces - Add statistic and percentile option to polarAnnulus; allow Conditional Probability Functions
- Allow percentile intervals to be considered in
polarPlot
when statistic = “cpf” - Correct calculation of AOT40 in aqStats to take account of daylight hours and growing season (Apr. to Sep.). Can use latitude/longitude, if supplied
- Fix bug in aqStats when non predefined pollutant used
- Allow log10 factor of 2 lines in
scatterPlot
when x and/or y are on a log scale - Allow users to supply own transform/inverse functions to hexbin
- Don’t try and pad-out missing data in rollingMean when returning results
- Make latticeExtra a ‘depends’
- Don’t copy-down data by default in
timeAverage
when requested averaging time is < original. Better handling when ‘site’ is present - Update AURN help file site information; add site type
- Show where data removed when min.bin > 1 for
polarPlot
- Add ‘trim’ value to percentiles in
polarPlot
to extract more source information. - Add ‘weights’ argument to
polarPlot
to down-weight bins with few data points - alternative to min.bin - Use more wd sectors for surface modelling when wd is not already rounded to 10 degree intervals in
polarPlot
- Fix bug in
timePlot
when pch supplied and group = TRUE. - Add Air Quality Standard for O3 in aqStats (days >120 ug/m3) not to be exceeded more than 10 days a year.
- Add max.freq option to
windRose
/pollutionRose
to control extent of radial limits - Add map.res option to
trajPlot
andtrajLevel
and make default lower resolution. Make default pollutant ‘height’ (always present) - Add Oslo and Rotterdam to trajectory database for 2010-2012
- Better limits control on
calendarPlot
, use first year if not supplied, add option month to allow only selected month(s) - Fix bug when type = “wd” and some are missing (remove them)
- Don’t open up graphic window in
timeAverage
- Fix indexing problem in polarCluster which sometimes caused the function to trip up
- Only plot full length trajectories in
trajPlot
- Allow smoothing parameter k to be used when smooth = TRUE for more control in
scatterPlot
- Add a bias correction to
windRose
(thanks to Philippe Barneoud from Environment Canada for pointing out the need and solution) - Better treatment of
pollutionRose
when comparing two met datasets when ws bias is zero - Fix conditionalEval to use COE, not IOA and other minor changes
- Allow method = “density” in
trajLevel
openair 0.8-0
CRAN release: 2013-02-13
- make sure missing dates are plotted properly in
scatterPlot
- fix regression in
corPlot
- main did not work - remove time zone options in import - users must supply data in GMT (UTC). Too many problems introduced due to daylight saving time
- Use Legates and McCabe Coefficient of Efficiency in modStats in place of the Index of Agreement - easier to interpret.
- Allow type = “month” etc to be used in
timeVariation
(was variable clash). Allow more flexibility when group and type are used - Better handling of user-defined limits in
polarPlot
andscatterPlot
(method = “level”) - Add optional mean line option to
percentileRose
. - Correct
pollutionRose
documentation about comparing 2 data sets (first subtracted from second) - Fix bug in
timeVariation
that showed extra NA level for certain groups/types - Fix scaling bug in polarCluster when there is negative data e.g. x = “temp”
- Allow statistic = “median” in
trajLevel
- NEW FUNCTION timeProp to plot time series by category as a bar chart
- Fix
windRose
bug when wind direction name was not wd - Fix bug in
importAURN
when pollutant = “all” was specified - Allow minimum value of breaks in ws to be above minimum ws value, but warn.
- Allow day to be numeric in selectByDate to select days of the month
- Better base maps with trajectory plotting (filled and alpha transparency)
- Fix
windRose
bug where all data are missing - Use higher resolution mapdata not maps package for trajectory plots
- Allow method = “hexbin” in
trajLevel
for hexagonal binning of trajectory frequencies - Refine rollingMean to allow moving window to be aligned centre/center, left or right + better treatment of ends when data capture threshold used. Use option ‘width’ rather than ‘hours’ because non-hourly data can be considered.
- Fix
pollutionRose
scaling issue, which sometimes missed the lower interval - Fix
timeAverage
data capture issue - was not always setting data to NA - Output clusters as C1, C2 etc. not 1, 2.
- Use same labelling in
calendarPlot
as other functions (wrong month order in non-English locales) - Export dendogram in
corPlot
- see example in help file - Fix scaling bug in
polarPlot
when radial variable was negative and small - Update ‘mydata’ to set negative data to NA
- Add method = CPF to percentile rose and
polarPlot
- Update trajectory analysis to allow Potential Source Contribution Function (PSCF) and Concentration Weighted Trajectory (CWT) to be considered
openair 0.7-0
CRAN release: 2012-09-19
- Allow more flexible layout when two or more pollutants are used with
polarPlot
and type is default - Fix colour scale problem for
windRose
when interval does not exist - Added ‘nativeRaster’ class handler for GoogleMapsPlots
- (test) Fix for GoogleMapsPlot xlim, ylim
- Do not remove missing data from
timeVariation
- Fix bug in FAC2 in modStats when observations = 0 (exclude from calculation because indeterminate)
- Fix bug in
windRose
for empty panels and panel labelling when data missing - New option start.day in cutData that affects most plots; allows users to set start day when type = “weekday”
- Allow categorical scales in
calendarPlot
- Allow two met data sets to be compared in
pollutionRose
- Allow statistic = “percentile” to be used with
polarPlot
- Allow ‘method’ to be passed to cor in
corPlot
- Added more back trajectory locations.
- Try harder to plot
polarPlot
s when there is insufficient data to calculate a smooth surface. - Rename some variables in
timeAverage
to avoid variable clash. - Add gridded frequency capability to
trajLevel
- Fix bug in colour scaling in polarFreq when statistic = “stdev” (0 would not be plotted)
- Fix bug in
summaryPlot
: type = “density” broken in recent versions
openair 0.6-0
CRAN release: 2012-05-11
- Add y.relation option to
timePlot
- Fix interpolation bug in calcFno2 and names in documentation.
- Refine conditionalQuantile scales
- Provide volatile and non-volatile components for FDMS PM10 and PM2.5 in
importKCL
- now consistent withimportAURN
- NEW FUNCTION conditionalEval for model evaluation - allows other variable performance to be assessed.
- Make lattice strips white by default for cleaner look on complicated plots
- Complete re-write of import to simplify - changes are NOT backward compatible but will allow more developments
- Allow line breaks in titles using to work with quickText
- thanks to Karl
- Allow better annotation of
calendarPlot
- highlight values above/below a certain threshold.
openair 0.5-25
CRAN release: 2012-03-19
- Fix bug when type = “wd” - would add missing data to north sector
- Add observed histogram to conditionalQuantile
- Fix bug in
timeAverage
when ws was not available but wd was - Temporary fix to GoogleMapsPlot documentation due to new package version
openair 0.5-22
- Fix scaling bug that could sometime affect
polarPlot
grid lines - Fix regression in
importKCL
that was introduced in 0.5-21 - Make sure wd data are rounded to 10 degrees in polarFreq
- Fix date padding issue in
smoothTrend
when type = “site” -
windRose
now gives mean ws in each panel rather than count - add option date.format to
timePlot
for more control over date format on axis
openair 0.5-21
CRAN release: 2012-02-22
- Use C++ code for rolling mean calcs. Much faster, more to follow
- NEW function trajCluster to carry out cluster analysis on back trajectories
- Simple model ranking available in modStats # Changes in openair 0.5-18 [2012-01-16]
- Update trajectory files to 2011 and add Berlin, Paris
- Add option seg to
pollutionRose
to control the width of the segments - Add option start.day to
timeVariation
to control the order of weekdays. - Fixed bug in polarAnnulus where 360 degree winds were absent.
- Remove dependency on zoo and proto.
- Allow
importAURN
to import new ws/wd from pre-calculated WRF data at AURN sites
openair 0.5-15
- Update to [IN DEVELOPMENT] GoogleMapsPlot.
- Tidy up calcFno2 plotting.
- Improve speed of
timeAverage
by removing date.pad. - Add vector averaging option to
timeAverage
for wind speed.
openair 0.5-14
NEW FUNCTION polarCluster for undertaking k-means clustering of bivariate polar plots
Remove any considerations of time zones in selectByDate. If start and end are supplied, whole days based on Date format are used to select. Now accepts start/end in the form “YYYY-mm-dd” as well as UK format e.g. dd/mm/YYYY.
openair 0.5-13
- Major update to
polarPlot
allowing variables other than “ws” to be plotted with wind direction. - Improve documentation for
polarPlot
/TaylorDiagram - Update openair citation information to Journal article
openair 0.5-12
- do not clip
polarPlot
concentrations unless upper is supplied - new option ‘intervals’ for
percentileRose
- add min.bin option to polarAnnulus
- add Index of Agreement to modStats
- new averaging time “season” for
timeAverage
- better treatment of avg.time = “season” and type = “season” in
TheilSen
andsmoothTrend
- use bootstrap methods to calculate 95% confidence intervals in the mean for
timeVariation
- New option ‘difference’ in
timeVariation
to show difference between two variables with bootstrap 95% CI in the mean - Byte-compile package
- Place key on right be default in
scatterPlot
to avoid clash with x or y axis labels. - Include all colour schemes defined in the RColorBrewer package
openair 0.5-11
CRAN release: 2011-10-05
- update to
corPlot
,scatterPlot
,smoothTrend
, linearRelation,percentileRose
,trajPlot
,trajLevel
,timeVariation
, TaylorDiagram,timePlot
,summaryPlot
improved … handling - remove warnings when importing air pollution data
- additional update to
corPlot
added pollutant option, and openair class output - tweak scaling on
percentileRose
deal with negative data - change MannKendall to use
TheilSen
for all estimates for consistency. May slightly affect some p estimates.
openair 0.5-10
- update to
calendarPlot
, kernelExceed, MannKendall and conditionalQuantile improved … handling
openair 0.5-9
- allow model performance change to be considered in TaylorDiagram
- update to
windRose
andpollutionRose
stat related annotation - update to
polarPlot
, ploarFreq and polarAnnulus improved … handling
openair 0.5-7
- update to trendLevel: improved … handling
- update to
windRose
/pollutionRose
: added statistic option “abs.count”; improved scaling of segment widths; improved … handling
openair 0.5-6
- NEW FUNCTIONS importTraj,
trajPlot
,trajLevel
for importing and plotting pre-defined HYSPLIT back trajectories. These functions are under active development and are for testing purposes only! - Fix error in % upper/lower uncertainty intervals for MannKendall
- More control over trend information placement for MannKendall
- arguments text.col, lab.frac (for vertical position) and lab.cex (for font size)
openair 0.5-4
- Use roxygen2 for package documentation and future maintainability
- Allow splitByDate to handle multiple sites and output a new column controlled by argument ‘name’
- More options for MannKendall: control of colour and variable x-axis scales
openair 0.4-23
CRAN release: 2011-07-26
- enhance ‘normalise’ option in
timePlot
- add annotate option to
windRose
/pollutionRose
- NEW FUNCTION TaylorDiagram for model evaluation.
openair 0.4-22
- NOTE - use reshape2 in place of reshape for speed and reliability
- allow more than one pollutant with
percentileRose
- fixed title bug with
scatterPlot
- not shown for some methods - modified key handling on plots using drawOpenKey, so key = NULL or FALSE now removes colour key.
- added method = “level” to
scatterPlot
for binning data with optional smoothing, plus other code clean-ups - fix bug in conditionalQuantile that labelled plots wrongly when site(s) has missing data
- added ref.x and ref.y to
timePlot
to allow reference lines to be added - do not remove calm wind speed conditions in any functions where this is not necessary
openair 0.4-21
- fixed bug in polarAnnulus that resulted in a failure to annotate the plot properly with period = “trend” and less than 1 year of data; improved smoothing default options used
- new ‘statistic’ option to
pollutionRose
to show contribution to counts and contribution to the mean. The latter is useful for displaying those wind directions that make most contribution to the overall mean. Panel mean is also now shown. - small change to final example of re-shaping data in
importKCL
-
timeAverage
can now expand data to shorter time periods e.g. hourly to 15-minute. This makes it more flexible to combine data sets with differing averaging times. For example, daily mean particle data can be expanded to 1-hour means and combined with an hourly meteorological data set. - Fix treatment of calms in checkPrep, which affected cases with zero wind speeds in
timeAverage
- Fix to vector averaging in
timeAverage
(did not include wind speed in calculations). For most data this will make very little difference, but will be more important for low wind speeds and/or variable wind directions. - allow type = ‘variable’ in
smoothTrend
- Add avg.time to
smoothTrend
for “month” or “year” averages
openair 0.4-20
- Do not remove calms in
timeAverage
- NEW FUNCTION importSAQN to import data from the Scottish Air Quality Network
openair 0.4-19
- improved import date.name/time.name handling of spaces
- Improved scaling for polarFreq
-
scatterPlot
type = “wd” labels aligned - Added option “statistic” to
polarPlot
, which can now consider “mean”, “median”, “max” (maximum), “frequency”. “stdev” (standard deviation) or “weighted.mean” in a similar way to polarFreq - Fixed bad.24 and international tz bugs in import
- updated import/import.2
openair 0.4-18
- Better handling of missing data in
smoothTrend
/MannKendall; particularly when there are multiple sites - Do not run checkPrep on selectByDate because it removes calms
- Fixed scaling bug in polarFreq when ws.int != 1
- use avg.time in calcPercentile instead of ‘period’ to ensure consistency with other functions (
timePlot
would fail with percentiles) - return NA in aqStats when no data present; previously it tried to calculate quantities, returning -Inf etc
openair 0.4-17
CRAN release: 2011-04-24
- use readRDS and not .readRDS (caused failure on R Dev)
- openair now depends on >=R2.13.0
- NEW FUNCTION sqStats to calculate common and pollutant-specific air quality statistics by year and site.
- Changed option data.capture in rollingMean to data.thresh to be consistent with other functions.
openair 0.4-16
- Fixed bugs in cutData when a partial year was used with type = “month”. Also affected type = “season” and “weekday”. The plots were labelled in the wrong order.
- Ensure that missing wind sectors are skipped in type = “wd” for
smoothTrend
, MannKendall,timePlot
andscatterPlot
openair 0.4-15
CRAN release: 2011-04-12
- Preparation for CRAN release
- removed some restrictions on type/period combinations in polarAnnulus
openair 0.4-14
- Added preliminary greyscale method to openColours and linked in strip background and other text and line colour control for standard openair plots.
openair 0.4-13
- Removed ad-hoc sites from
importKCL
, added site classification to the help file and ensured GMT is exported.
openair 0.4-12
- Added y.relation option to
smoothTrend
and MannKendall to allow flexible y-scales. - NEW FUNCTION ‘
percentileRose
’ for flexible plotting of percentiles by wind direction - NEW FUNCTION
selectRunning
for selecting run lengths of a numeric variable above a certain threshold. - Modified plot layout in
polarPlot
to maximise plotting area - Initial fixes to functions affected by time zone settings
- polarFreq now has consistent annotation cf.
windRose
andpercentileRose
; new option grid.line to control radial axes. - Fixed couple of minor auto.text bugs in
summaryPlot
andtimePlot
- Removed dependency of date for polar functions where time-based types are not required.
openair 0.4-11
- More consistent use of strips in default plot (remove them)
- Add percentage units to
windRose
andpollutionRose
on radial scale
openair 0.4-10
CRAN release: 2011-03-08
- Fixed
calendarPlot
main/quickText handling. - Fixed
calendarPlot
first day of month error. - Fixed
summaryPlot
site ordering when more than one site.