I've had a chance to read the source more thoroughly. The chain of events is as follows:

1. Local function `plotts()` is defined with argument `cex` that defaults to `par("cex")` 2. `...` is passed to `plotts()`. If "cex" is an element in `...`, inside `plotts()` the variable `cex` is assigned thereby (overriding the default arg). Importantly, this means that the element "cex" is captured and _removed_ from `...`. `...` is eventually passed to `plot.window()`.
3.
- In the univariate case (NCOL(x) == 1): When `lines.default()` is called to actually plot the data (https://github.com/wch/r-source/blob/trunk/src/library/stats/R/ts.R#L588 and https://github.com/wch/r-source/blob/trunk/src/library/stats/R/ts.R#L597 for reference), `cex` is not included in the call. - In the bivariate case (NCOL(x) > 1): Because "cex" was captured and removed from `...`, it is not passed to `plot.default` when it is called (https://github.com/wch/r-source/blob/trunk/src/library/stats/R/ts.R#L548).

It turns out that the "eating" is not being done by `...` but by the signature of `plotts`.

The documentation currently reads:

...: additional graphical arguments, see 'plot', 'plot.default' and 'par'.

This, to me, suggests parity with the 'plot' function in how the arguments in '...' are handled. Therefore either the code is wrong or the documentation is incomplete and misleading.

I filed this is as a bug because it's undocumented, and inconsistent with how other arguments typically passed through `plot.default` are handled.

I'll be happy to do the patch myself -- I just need to know which thing to patch (the source or the docs).


Greg


On 2016-08-25 03:00, David Winsemius wrote:

On Aug 24, 2016, at 5:59 PM, Gregory Werbin <greg.wer...@libertymail.net> wrote:

I did a search on Bugzilla for "plot.ts" and didn't find anything on this issue. I tried to sign up for Bugzilla to report it, but my e-mail address didn't pass your "syntax checking" for a legal e-mail address.

The bug is easily reproducible on my machine as follows:

## start

# generate some data
y <- arima.sim(list(), 150)

# this will definitely dispatch to a ".ts" method
class(y)[1] == 'ts'

# compare and note that `cex = 0.5` has no effect
plot(y, type = 'b', pch = 16)
plot(y, type = 'b', pch = 16, cex = 0.5)

# it works if `y` is coerced back to a regular vector
plot(as.numeric(y), type = 'b', pch = 16, cex = 0.5)

# another way to see the issue
plot.ts(y, type = 'b', pch = 16, cex = 0.5)
plot.default(y, type = 'b', pch = 16, cex = 0.5)

## end

Skimming through source code for `plot.ts`, it seems like the `cex` argument is being "eaten" by a `...` somewhere without being properly passed to `plot.default`.

'...' does not "eat" parameters, it passes them on.

Looking at the very top of the body we see this in the definition of the internal `plotts` function:

cex = par("cex"), lty = par("lty"), lwd = par("lwd"),
axes = TRUE, frame.plot = axes, ann = par("ann"), cex.lab = par("cex.lab"),
col.lab = par("col.lab"), font.lab = par("font.lab"),
cex.axis = par("cex.axis"), col.axis = par("col.axis"),

And at the end of the body we se the call to plotts (including the "dots")

So I would suggest using par-settings.

par(cex=0.5)
plot(y, type = 'b', pch = 16)

(Question seems more appropriate for r-help.)

--
David.

The output of `R.version` is:
platform       x86_64-apple-darwin15.5.0
arch           x86_64
os             darwin15.5.0
system         x86_64, darwin15.5.0
status
major          3
minor          3.1
year           2016
month          06
day            21
svn rev        70800
language       R
version.string R version 3.3.1 (2016-06-21)
nickname       Bug in Your Hair

Greg

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

David Winsemius
Alameda, CA, USA

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to