R: Plot Method for Class "rose" (Grid Graphics Function)
plot.rose
R Documentation
Plot Method for Class "rose" (Grid Graphics Function)
Description
Describes plot method for class "rose"
Usage
## S4 method for signature 'rose,missing'
plot(
x,
transf = function(x) sqrt(x),
subset.col = NULL,
warn = TRUE,
general = general.control(),
grid = grid.control(),
title = title.control(),
key = key.control())
Arguments
x
Object rose.
transf
Transformation function for x@rho. It defaults to
the square root, resulting in equal area roses.
subset.col
Display only a subset of the columns of
x@rho. Subset might be declared by numerical values or by
name.
warn
Logical. If FALSE, warnings are suppressed.
general
Settings for general appearance of plot, defined in
general.control.
grid
Settings for appearance of guiding elements of rose such
as circles, rays and labels, defined in grid.control
title
Settings for title, defined in
title.control.
key
Settings for appearance of the legend, defined in
key.control.
Details
This function appeals especially to environmental specialists who
often have response variables, which depend from cyclic variables like
the direction of wind, the hour of the day, the month etc. All these
variables are displayed usually clockwise,
starting with 0 in the north (12 o' clock). We call this
kind of coordinates 'clock coordinates', to distinct them from the
polar coordinates as used in mathematical context. The
rose object is displayed as the time on a clock,
measuring the angle defined in slot cyclVar in the clockwise
direction from the north.
The eye takes the area of a graphical object as a measure of its
size. This is why the default transformation of x@rho is
chosen to be the square root. For equal distance roses use the
transformation function function(x) x.
All labels, titles and line sizes are defined in multiples of cex.
This graphic function is based on package grid:
Viewport vp.rose which was used to draw the rose and viewport
vp.key which was used to draw the key may be addressed by
pushviewport() after having drawn the figure.
Value
No value returned
Note
The function is designed to use the area on the active viewport in an
optimal way, but the plot is not scalable after having been drawn.
Furthermore this function is still experimental so that some features
may change in future versions.
You will find another nice example for this plot method in AirQual
Author(s)
Rene Locher
See Also
rose, rose-class
Examples
hour <- rep(0:23,100)
WD <- c(rnorm(24*90, mean=sample(c(190,220,50),24*90,
replace = TRUE),sd=10),
rnorm(24*10, mean=360, sd=180))%%360
dat <- data.frame(A = (2*cos((hour+6)/6*pi)+
2*cos((WD+60)/180*pi)+rnorm(24*100,4))^2,
B = (2*cos((hour+4)/6*pi)+rnorm(24*100,1,8))^2)
dat$B[dat$B>1000] <- 1000
## two different response variables, scalar summary function
mean.dayrose <- rose(dat[,c("A","B")],
cyclVar = hour,
n.cyclVar = 24,
circle = 24,
FUN=mean, na.rm=TRUE)
## one response variable, vector summary function
quant.windrose <- rose(dat$A,
cyclVar = WD,
n.cyclVar = 16, circle = 360,
FUN=quantile, na.rm=TRUE)
## one response variable, second (non cyclic) explanatory variable,
## scalar summary function
windrose <- rose(dat[,c("A")],
cyclVar = WD,
n.cyclVar=8,
circle = 360,
cut = dat$B,
breaks = c(0,10,100,1000),
include.lowest = TRUE, dig.lab = 4,
FUN = function(x) sum(!is.na(x)))
grid.newpage()
plot(mean.dayrose,
general = general.control(
mar = rep(1,4),
stacked = FALSE,
lwd = 3,
lty = c(1:2)),
grid = grid.control(
circ.n = 2,
circ.sub.n = 2,
circ.lwd = 2,
circ.sub.col = "black",
ray.n = 12,
cyclVar.lab = seq(0,by=2,to=22)),
title = title.control(text = "unstacked dayrose"),
key = key.control(title = "Mean",
between = 0))
grid.newpage()
plot(quant.windrose)
grid.newpage()
plot(windrose,
general = general.control(
stacked = TRUE,
lwd = 3),
grid = grid.control(
circ.n = 2,
circ.sub.n = 2),
title = title.control(
text = "Stacked windrose:\nCounts of A-Values"),
key = key.control(title = "Value of B"))
if (require(SwissAir)){
data(AirQual)
dat <-
data.frame(month =as.numeric(substr(AirQual$start,4,5)),
hour = as.numeric(substr(AirQual$start,12,13)),
WD = AirQual$ad.WD,
NOx = AirQual$ad.NOx,
## NO2 = AirQual$ad.NOx-AirQual$ad.NO,
## NO = AirQual$ad.NO,
O3 = AirQual$ad.O3,
Ox = AirQual$ad.O3+AirQual$ad.NOx-AirQual$ad.NO)
## Windrose
windrose <- rose(dat$WD,
cyclVar = dat$WD, n.cyclVar = 32, circle = 360,
FUN = function(x) sum(!is.na(x)))
grid.newpage()
plot(windrose,
general =
general.control(lwd = 2),
grid =
grid.control(circ.n = 2,
circ.sub.n = 2))
## median of concentrations as a function of daytime
## from May to September
med.dayrose <- rose(dat[,c("NOx","O3","Ox")],
subset= dat$month>4 & dat$month<10,
cyclVar=dat$hour, n.cyclVar=24, circle=24,
FUN=median, na.rm=TRUE)
## line type version of rose
grid.newpage()
plot(med.dayrose,
general = general.control(lwd=2, type="l"),
grid =
grid.control(ray.n = 12,
circ.n =2,
circ.sub.n = 2,
cyclVar.lab = seq(0,by=2,to=22)),
title = title.control(text =
"Day Rose of Medians\nduring summer"))
## quantiles of concentrations as a function of daytime
## from May to September
quant.dayrose <- rose(dat$NOx,
subset= dat$month>4 & dat$month<10,
cyclVar=dat$hour, n.cyclVar=24, circle=24,
FUN=quantile, na.rm=TRUE)
grid.newpage()
plot(quant.dayrose,
general =
general.control(mar = c(0.3, 0.3, 0.3, 2),
lwd = 2),
grid =
grid.control(ray.n = 12,
cyclVar.lab = seq(0,by=2,to=22)),
title = title.control(text = "Concentration of NOx [ppb]\nduring summer"),
key = key.control(title = "Quantiles"))
} else print("Package SwissAir is not available")
Results
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(IDPmisc)
Loading required package: grid
Loading required package: lattice
> png(filename="/home/ddbj/snapshot/RGM3/R_CC/result/IDPmisc/plot.rose.Rd_%03d_medium.png", width=480, height=480)
> ### Name: plot.rose
> ### Title: Plot Method for Class "rose" (Grid Graphics Function)
> ### Aliases: plot.rose plot plot,rose,missing-method
> ### Keywords: hplot
>
> ### ** Examples
>
> hour <- rep(0:23,100)
> WD <- c(rnorm(24*90, mean=sample(c(190,220,50),24*90,
+ replace = TRUE),sd=10),
+ rnorm(24*10, mean=360, sd=180))%%360
> dat <- data.frame(A = (2*cos((hour+6)/6*pi)+
+ 2*cos((WD+60)/180*pi)+rnorm(24*100,4))^2,
+ B = (2*cos((hour+4)/6*pi)+rnorm(24*100,1,8))^2)
> dat$B[dat$B>1000] <- 1000
>
> ## two different response variables, scalar summary function
> mean.dayrose <- rose(dat[,c("A","B")],
+ cyclVar = hour,
+ n.cyclVar = 24,
+ circle = 24,
+ FUN=mean, na.rm=TRUE)
>
> ## one response variable, vector summary function
> quant.windrose <- rose(dat$A,
+ cyclVar = WD,
+ n.cyclVar = 16, circle = 360,
+ FUN=quantile, na.rm=TRUE)
>
> ## one response variable, second (non cyclic) explanatory variable,
> ## scalar summary function
> windrose <- rose(dat[,c("A")],
+ cyclVar = WD,
+ n.cyclVar=8,
+ circle = 360,
+ cut = dat$B,
+ breaks = c(0,10,100,1000),
+ include.lowest = TRUE, dig.lab = 4,
+ FUN = function(x) sum(!is.na(x)))
>
> grid.newpage()
> plot(mean.dayrose,
+ general = general.control(
+ mar = rep(1,4),
+ stacked = FALSE,
+ lwd = 3,
+ lty = c(1:2)),
+ grid = grid.control(
+ circ.n = 2,
+ circ.sub.n = 2,
+ circ.lwd = 2,
+ circ.sub.col = "black",
+ ray.n = 12,
+ cyclVar.lab = seq(0,by=2,to=22)),
+ title = title.control(text = "unstacked dayrose"),
+ key = key.control(title = "Mean",
+ between = 0))
Warning messages:
1: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
2: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
>
> grid.newpage()
> plot(quant.windrose)
Warning messages:
1: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
2: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
>
> grid.newpage()
> plot(windrose,
+ general = general.control(
+ stacked = TRUE,
+ lwd = 3),
+ grid = grid.control(
+ circ.n = 2,
+ circ.sub.n = 2),
+ title = title.control(
+ text = "Stacked windrose:\nCounts of A-Values"),
+ key = key.control(title = "Value of B"))
Warning messages:
1: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
2: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
>
>
> if (require(SwissAir)){
+ data(AirQual)
+ dat <-
+ data.frame(month =as.numeric(substr(AirQual$start,4,5)),
+ hour = as.numeric(substr(AirQual$start,12,13)),
+ WD = AirQual$ad.WD,
+ NOx = AirQual$ad.NOx,
+ ## NO2 = AirQual$ad.NOx-AirQual$ad.NO,
+ ## NO = AirQual$ad.NO,
+ O3 = AirQual$ad.O3,
+ Ox = AirQual$ad.O3+AirQual$ad.NOx-AirQual$ad.NO)
+
+
+ ## Windrose
+ windrose <- rose(dat$WD,
+ cyclVar = dat$WD, n.cyclVar = 32, circle = 360,
+ FUN = function(x) sum(!is.na(x)))
+
+ grid.newpage()
+ plot(windrose,
+ general =
+ general.control(lwd = 2),
+ grid =
+ grid.control(circ.n = 2,
+ circ.sub.n = 2))
+
+ ## median of concentrations as a function of daytime
+ ## from May to September
+ med.dayrose <- rose(dat[,c("NOx","O3","Ox")],
+ subset= dat$month>4 & dat$month<10,
+ cyclVar=dat$hour, n.cyclVar=24, circle=24,
+ FUN=median, na.rm=TRUE)
+
+ ## line type version of rose
+ grid.newpage()
+ plot(med.dayrose,
+ general = general.control(lwd=2, type="l"),
+ grid =
+ grid.control(ray.n = 12,
+ circ.n =2,
+ circ.sub.n = 2,
+ cyclVar.lab = seq(0,by=2,to=22)),
+ title = title.control(text =
+ "Day Rose of Medians\nduring summer"))
+
+ ## quantiles of concentrations as a function of daytime
+ ## from May to September
+ quant.dayrose <- rose(dat$NOx,
+ subset= dat$month>4 & dat$month<10,
+ cyclVar=dat$hour, n.cyclVar=24, circle=24,
+ FUN=quantile, na.rm=TRUE)
+ grid.newpage()
+ plot(quant.dayrose,
+ general =
+ general.control(mar = c(0.3, 0.3, 0.3, 2),
+ lwd = 2),
+ grid =
+ grid.control(ray.n = 12,
+ cyclVar.lab = seq(0,by=2,to=22)),
+ title = title.control(text = "Concentration of NOx [ppb]\nduring summer"),
+ key = key.control(title = "Quantiles"))
+ } else print("Package SwissAir is not available")
Loading required package: SwissAir
Warning messages:
1: In rose(dat$WD, cyclVar = dat$WD, n.cyclVar = 32, circle = 360, :
cyclVar' must not contain NAs! 34 observations are omitted!!
2: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'
3: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'
4: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
5: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
6: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
7: In FUN(X[[i]], ...) : 'x' is NULL so the result will be NULL
>
>
>
>
>
>
> dev.off()
null device
1
>