Description Usage Arguments Value Author(s) References See Also Examples
This function plots the crosswavelet power image, or alternatively the wavelet
coherence image, of two time series, which are provided by an object of class
"analyze.coherency"
.
The vertical axis shows the Fourier periods. The horizontal axis shows time step counts, but can
be easily transformed into a calendar axis if dates are provided in either row names or a variable
named "date"
in the data frame at hand. Both axes can be relabeled.
In particular, an option is given to individualize the period and/or time axis
by specifying tick marks and labels.
An option is given to raise crosswavelet power (or wavelet coherence) values to any (positive) exponent before plotting in order to accentuate the contrast of the image.
The color levels can be defined according to quantiles of values or according to equidistant breakpoints (covering the interval from 0 to maximum level), with the number of levels as a further parameter. A userdefined maximum level can be applied to crosswavelet power images. In addition, there is an option to adopt an individual color palette.
Further plot design options concern: plot of the cone of
influence, plot of contour lines to border areas of significance, plot of
the ridge, and plot of arrows (optional: "smoothed" arrows computed
from smoothing filters as defined in analyze.coherency
) to reflect
phase differences.
For that matter, the significance level of contour lines can be defined separately. The plot of the ridge can be restricted to a highlevel region ("high" according to a given level of plotted values). In particular, the area to be filled with arrows can be determined in several ways: to reflect significance (at a given level) with respect to crosswavelet power, wavelet coherence, or individual wavelet power, and/or to flag a highvalue region. Furthermore, there is an option to clear out the area where the pvalues of crosswavelet power (coherence, respectively) exceed a given level.
Finally, there is an option to format and insert a color legend (a righthand vertical color bar) and to set the plot title. For further processing of the plot, graphical parameters of plot regions are provided as output.
The name and parts of the layout were inspired by a similar function developed by
Huidong Tian and Bernard Cazelles (archived R package WaveletCo
).
The code for the arrow design to reflect phase differences
has been adopted from Huidong Tian.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34  wc.image(WC,
which.image = "wp", exponent = 1,
plot.coi = TRUE,
plot.contour = TRUE, siglvl.contour = 0.1, col.contour = "white",
plot.ridge = FALSE, lvl = 0, col.ridge = "black",
plot.arrow = TRUE, use.sAngle = FALSE,
p = 1,
which.arrow.sig = which.image,
siglvl.arrow = 0.05, col.arrow = "black",
clear.area = FALSE,
which.area.sig = which.image, siglvl.area = 0.2,
color.key = "quantile",
n.levels = 100,
color.palette = "rainbow(n.levels, start = 0, end = .7)",
maximum.level = NULL,
useRaster = TRUE, max.contour.segments = 250000,
plot.legend = TRUE,
legend.params = list(width=1.2, shrink = 0.9, mar = 5.1,
n.ticks = 6,
label.digits = 1, label.format = "f",
lab = NULL, lab.line = 2.5),
label.time.axis = TRUE,
show.date = FALSE, date.format = NULL, date.tz = NULL,
timelab = NULL, timetck = 0.02, timetcl = 0.5,
spec.time.axis = list(at = NULL, labels = TRUE,
las = 1, hadj = NA, padj = NA),
label.period.axis = TRUE,
periodlab = NULL, periodtck = 0.02, periodtcl = 0.5,
spec.period.axis = list(at = NULL, labels = TRUE,
las = 1, hadj = NA, padj = NA),
main = NULL,
lwd = 2, lwd.axis = 1,
graphics.reset = TRUE,
verbose = FALSE)

WC 
an object of class  
which.image 
Which image is to be plotted?
Default: 
exponent 
Exponent applied to values before plotting in order to accentuate the contrast of the image; the exponent should be positive. Default: 
plot.coi 
Plot cone of influence? Logical. Default: 
plot.contour 
Plot contour lines to border the area of crosswavelet power (or wavelet coherence,
depending on Default: 
siglvl.contour 
level of crosswavelet power (or wavelet coherence, depending on Default: 
col.contour 
color of contour lines. Default: 
plot.ridge 
Plot the crosswavelet power (or wavelet coherence, depending on Default: 
lvl 
minimum level of crosswavelet power (or wavelet coherence, depending on Default: 
col.ridge 
ridge color. Default: 
plot.arrow 
Plot arrows depicting the phase difference? Logical. Default: 
use.sAngle 
Use smoothed version of phase difference? Logical. Default: 
p 
Which area should be filled with arrows displaying phase differences?
Default: 
which.arrow.sig 
Which spectrum (and corresponding pvalues) should be used to restrict the plot of arrows according to significance?
Default:  
siglvl.arrow 
level of significance for arrows to be plotted. Default:  
col.arrow 
arrow color. Default: 
clear.area 
Clear out an area where pvalues are above a certain level? Logical. (Here, pvalues will refer to the spectrum defined by Default:  
which.area.sig 
Which power spectrum (and corresponding pvalues) should be used to clear the outer area?
Default:  
siglvl.area 
level of significance for the area to be cleared out. Default: 
color.key 
How to assign colors to power and coherence levels? Two options:
Default:  
n.levels 
Number of color levels. Default:  
color.palette 
Definition of color levels. (The color palette will be assigned to levels in reverse order!) Default: 
maximum.level 
Maximum plot level of crosswavelet power considered; only effective in case of equidistant breakpoints ( Default: 
useRaster 
Use a bitmap raster instead of polygons to plot the image? Logical. Default: 
max.contour.segments 
limit on the number of segments in a single contour line, positive integer. Default: 
plot.legend 
Plot color legend (a vertical bar of colors and breakpoints)? Logical. Default: 
legend.params 
a list of parameters for the plot of the color legend; parameter values can be set selectively
(style in parts adopted from

label.time.axis 
Label the time axis? Logical. Default: 
show.date 
Show calendar dates? (Effective only if dates are available as row names or by variable
Default: 
date.format 
the format of calendar date given as a character string, e.g. Default: 
date.tz 
a character string specifying the time zone of calendar date; see Default: 
timelab 
Time axis label. Default: 
timetck 
length of tick marks on the time axis as a fraction of the smaller of the width or height of the plotting region; see Default here: 
timetcl 
length of tick marks on the time axis as a fraction of the height of a line of text; see Default here: 
spec.time.axis 
a list of tick mark and label specifications for individualized time axis labeling
(only effective if
Mismatches will result in a reset to default plotting. 
label.period.axis 
Label the (Fourier) period axis? Logical. Default: 
periodlab 
(Fourier) period axis label. Default: 
periodtck 
length of tick marks on the period axis as a fraction of the smaller of the width or height
of the plotting region; see Default here: 
periodtcl 
length of tick marks on the period axis as a fraction of the height of a line of text; see Default here: 
spec.period.axis 
a list of tick mark and label specifications for individualized period axis labeling
(only effective if
Mismatches will result in a reset to default plotting. 
main 
an overall title for the plot. Default: 
lwd 
line width of contour lines and ridge. Default: 
lwd.axis 
line width of axes (image and legend bar). Default: 
graphics.reset 
Reset graphical parameters? Logical. Default: 
verbose 
Print verbose output on the screen? Logical. Default: 
A list of class graphical parameters
with the following elements:
op 
original graphical parameters 
image.plt 
image plot region 
legend.plt 
legend plot region 
Angi Roesch and Harald Schmidbauer; credits are also due to Huidong Tian, and Bernard Cazelles.
AguiarConraria L., and Soares M.J., 2011. Business cycle synchronization and the Euro: A wavelet analysis. Journal of Macroeconomics 33 (3), 477–489.
AguiarConraria L., and Soares M.J., 2011. The Continuous Wavelet Transform: A Primer. NIPE Working Paper Series 16/2011.
Cazelles B., Chavez M., Berteaux, D., Menard F., Vik J.O., Jenouvrier S., and Stenseth N.C., 2008. Wavelet analysis of ecological time series. Oecologia 156, 287–304.
Liu P.C., 1994. Wavelet spectrum analysis and ocean wind waves. In: FoufoulaGeorgiou E., and Kumar P., (eds.), Wavelets in Geophysics, Academic Press, San Diego, 151–166.
Tian, H., and Cazelles, B., 2012. WaveletCo
.
Available at https://cran.rproject.org/src/contrib/Archive/WaveletCo/, archived April 2013; accessed July 26, 2013.
Torrence C., and Compo G.P., 1998. A practical guide to wavelet analysis. Bulletin of the American Meteorological Society 79 (1), 61–78.
Veleda D., Montagne R., and Araujo M., 2012. CrossWavelet Bias Corrected by Normalizing Scales. Journal of Atmospheric and Oceanic Technology 29, 1401–1408.
analyze.coherency
, wc.avg
, wc.sel.phases
, wc.phasediff.image
,
wt.image
, wt.avg
,
wt.sel.phases
, wt.phase.image
, reconstruct
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205  ## Not run:
## The following example is modified from Veleda et al., 2012:
series.length < 3*128*24
x1 < periodic.series(start.period = 1*24, length = series.length)
x2 < periodic.series(start.period = 2*24, length = series.length)
x3 < periodic.series(start.period = 4*24, length = series.length)
x4 < periodic.series(start.period = 8*24, length = series.length)
x5 < periodic.series(start.period = 16*24, length = series.length)
x6 < periodic.series(start.period = 32*24, length = series.length)
x7 < periodic.series(start.period = 64*24, length = series.length)
x8 < periodic.series(start.period = 128*24, length = series.length)
x < x1 + x2 + x3 + x4 + 3*x5 + x6 + x7 + x8 + rnorm(series.length)
y < x1 + x2 + x3 + x4  3*x5 + x6 + 3*x7 + x8 + rnorm(series.length)
matplot(data.frame(x, y), type = "l", lty = 1, xaxs = "i", col = 1:2,
xlab = "index", ylab = "",
main = "hourly series with periods of 1, 2, 4, 8, 16, 32, 64, 128 days",
sub = "(out of phase at period 16, different amplitudes at period 64)")
legend("topright", legend = c("x","y"), col = 1:2, lty = 1)
## The following dates refer to the local time zone
## (possibly allowing for daylight saving time):
my.date < seq(as.POSIXct("20141014 00:00:00", format = "%F %T"),
by = "hour",
length.out = series.length)
my.data < data.frame(date = my.date, x = x, y = y)
## Computation of crosswavelet power and wavelet coherence, x over y:
## a natural choice of 'dt' in the case of hourly data is 'dt = 1/24',
## resulting in one time unit equaling one day.
## This is also the time unit in which periods are measured.
my.wc < analyze.coherency(my.data, c("x","y"),
loess.span = 0,
dt = 1/24, dj = 1/20,
window.size.t = 1, window.size.s = 1/2,
lowerPeriod = 1/4,
make.pval = TRUE, n.sim = 10)
## Plot of crosswavelet power spectrum,
## with color breakpoints according to quantiles:
wc.image(my.wc,
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels (quantiles)"),
periodlab = "period (days)")
## Note:
## The default time axis shows an index of given points in time,
## which is the count of hours in our example.
## By default, arrows are plotted which show the phase differences
## of x over y at respective significant periods.
## (Please see our guide booklet for further explanation.)
## The same plot, but with equidistant color breakpoints:
wc.image(my.wc, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels (equidistant)"),
periodlab = "period (days)")
## The same plot, but adopting a palette of gray colors,
## omitting the arrows:
wc.image(my.wc, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels (equidistant)"),
color.palette = "gray( (1:n.levels)/n.levels )",
plot.arrow = FALSE,
periodlab = "period (days)")
## The same plot, now with ridge of power:
wc.image(my.wc, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels (equidistant)"),
color.palette = "gray( (1:n.levels)/n.levels )",
plot.arrow = FALSE,
plot.ridge = TRUE, col.ridge = "red",
periodlab = "period (days)")
## The plot, turning back to arrows, now in yellow color:
wc.image(my.wc, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels (equidistant)"),
color.palette = "gray( (1:n.levels)/n.levels )",
col.arrow = "yellow",
periodlab = "period (days)")
## Alternate styles of the time axis:
## The plot with time elapsed in days, starting from 0 and proceeding
## in steps of 50 days (50*24 hours), instead of the (default) time index:
index.ticks < seq(1, series.length, by = 50*24)
index.labels < (index.ticks1)/24
## Insert your specification of time axis:
wc.image(my.wc, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels (equidistant)"),
color.palette = "gray( (1:n.levels)/n.levels )",
col.arrow = "yellow",
periodlab = "period (days)", timelab = "time elapsed (days)",
spec.time.axis = list(at = index.ticks, labels = index.labels))
## The plot with (automatically produced) calendar axis:
wc.image(my.wc, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels (equidistant)"),
color.palette = "gray( (1:n.levels)/n.levels )",
col.arrow = "yellow",
periodlab = "period (days)",
show.date = TRUE, date.format = "%F %T")
## Individualizing your calendar axis (works with show.date = TRUE)...
## How to obtain, for example, monthly date ticks and labels:
## The sequence of tick positions:
monthly.ticks < seq(as.POSIXct("20141101 00:00:00", format = "%F %T"),
as.POSIXct("20151101 00:00:00", format = "%F %T"),
by = "month")
## Observe that the following specification may produce an error:
## 'seq(as.Date("20141101"), as.Date("20151101"), by = "month")'
## Time of the day is missing here!
## The sequence of labels (e.g. information on month and year only):
monthly.labels < strftime(monthly.ticks, format = "%b %Y")
## Insert your specification of time axis as parameter to wc.image:
wc.image(my.wc, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels (equidistant)"),
color.palette = "gray( (1:n.levels)/n.levels )",
col.arrow = "yellow",
periodlab = "period (days)",
show.date = TRUE, date.format = "%F %T",
spec.time.axis = list(at = monthly.ticks, labels = monthly.labels,
las = 2))
## Note:
## The monthly ticks specify the midpoints of the colored cells and
## match the location of corresponding (default) time index ticks.
## A crosswavelet power plot with individualized period axis and exponent
## to accentuate contrast in the image:
wc.image(my.wc, exponent = 0.5, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels
(raised by exponent 0.5, equidistant levels)"),
color.palette = "gray( (1:n.levels)/n.levels )",
col.arrow = "yellow",
periodlab = "period (days)",
spec.period.axis = list(at = c(1,2,4,8,16,32,64,128)))
## An option to switch to the corresponding frequency axis:
my.periods < c(1,2,4,8,16,32,64,128)
my.frequencies < paste("1/",my.periods, sep = "")
wc.image(my.wc, exponent = 0.5, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels
(raised by exponent 0.5, equidistant levels)"),
color.palette = "gray( (1:n.levels)/n.levels )",
col.arrow = "yellow",
periodlab = "frequency (per day)",
spec.period.axis = list(at = my.periods, labels = my.frequencies))
## Adding, for example, horizontal lines at period ticks...
## There is an option to add further objects to the image plot region,
## by setting 'graphics.reset = FALSE'
## (but recall previous par settings after plotting):
op < par(no.readonly = TRUE)
wc.image(my.wc, exponent = 0.5, color.key = "i",
main = "crosswavelet power spectrum, x over y",
legend.params = list(lab = "crosswavelet power levels
(raised by exponent 0.5, equidistant levels)"),
color.palette="gray( (1:n.levels)/n.levels )",
col.arrow = "yellow",
periodlab = "frequency (per day)",
spec.period.axis = list(at = my.periods, labels = my.frequencies),
timelab = "",
show.date = TRUE, date.format = "%F %T",
graphics.reset = FALSE)
abline(h = log2(my.periods))
year2015 < as.POSIXct("20150101 00:00:00", format = "%F %T")
abline(v = year2015)
axis(1, at = year2015, labels = 2015, padj = 1)
par(op)
## For further axis plotting options:
## Please see the examples in our guide booklet,
## URL http://www.hsstat.com/projects/WaveletComp/WaveletComp_guided_tour.pdf.
## Plot of wavelet coherence of x over y,
## with color breakpoints according to quantiles:
wc.image(my.wc, which.image = "wc",
main = "wavelet coherence, x over y",
legend.params = list(lab = "wavelet coherence levels (quantiles)",
lab.line = 3.5, label.digits = 3),
periodlab = "period (days)")
## Plot of wavelet coherence, but with equidistant color breakpoints:
wc.image(my.wc, which.image = "wc", color.key = "i",
main = "wavelet coherence, x over y",
legend.params = list(lab = "wavelet coherence levels (equidistant)"),
periodlab = "period (days)")
## End(Not run)

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.