Why does R xts plot only show a single column with

2019-09-14 21:57发布

问题:

On one machine, plot.xts correctly displays data in two columns:

On another, things look very different:

The code for both is the same:

library(zoo)
library(xts)
library(xtsExtra)
sessionInfo()
timezone = "UTC"
Sys.setenv(TZ=timezone)
sampleData = "Time (UTC),CPU,Runqueue,Blocked,MemoryFree,PageIns,ContextSwitches,Wait,Steal
2014-10-15 16:12:11,20,0,0,12222172,0,2549,0,0
2014-10-15 16:12:12,27,1,0,12220732,0,3619,0,0
2014-10-15 16:12:13,30,0,0,12220212,0,2316,0,0"
data = as.xts(read.zoo(text=sampleData, format="%Y-%m-%d %H:%M:%S", header=TRUE, sep=",", tz=timezone))
plot.xts(data, main="Title", minor.ticks=FALSE, yax.loc="left", auto.grid=TRUE, nc=2)

The output of the successful machine:

> library(zoo)

Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric

> library(xts)
> library(xtsExtra)

Attaching package: ‘xtsExtra’

The following object is masked from ‘package:xts’:

    plot.xts

> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-redhat-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] xtsExtra_0.0-1 xts_0.9-7      zoo_1.7-11    

loaded via a namespace (and not attached):
[1] grid_3.1.2      lattice_0.20-29
... The rest are just commands, no warnings/errors...

The output of the failing machine:

> library(zoo)

Attaching package: 'zoo'

The following objects are masked from 'package:base':

    as.Date, as.Date.numeric

> library(xts)
> library(xtsExtra)

Attaching package: 'xtsExtra'

The following object is masked from 'package:xts':

    plot.xts

> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-redhat-linux-gnu (64-bit)

locale:
[1] C

attached base packages:
[1] stats     graphics  grDevices utils     datasets    methods   base     

other attached packages:
[1] xtsExtra_0.0-1 xts_0.9-7      zoo_1.7-11    

loaded via a namespace (and not attached):
    [1] grid_3.1.2      lattice_0.20-29
... The rest are just commands, no warnings/errors...

The successful machine is local and the failing machine is remote with export DISPLAY=${IP}:0 to the successful machine.

Why does R xts plot only show a single column with nc=2?

回答1:

I was able to reproduce the different results using your script on the same machine - but using different versions of xtsExtra. The bad news is that the new version is giving the wrong result. This may be related to refactoring of xtsExtra/R/plot.R at r-forge.

Is it possible the package was installed more recently on the "failing machine"?



回答2:

As bergant mentioned in https://stackoverflow.com/a/28571442/1293660, this is a bug in xtsExtra. After a binary search, revision #850 is the latest version that works:

$ svn checkout --revision 850 svn://svn.r-forge.r-project.org/svnroot/xts/
$ R
> install.packages("xts/pkg/xts", repos=NULL, type="source")
> install.packages("xts/pkg/xtsExtra", repos=NULL, type="source")


回答3:

plot.xts(data, main="Title", minor.ticks=FALSE, yax.loc="left", auto.grid=TRUE, nc=2)

see ?xts::plot.xts and you will note that there are not arguments for yax.loc or nc. The plot.xts code was refactored this past summer and now the development of plot.xts is happening in the xts package.

Install xts rev 875 from R-Forge and try the following, this worked for me.

plot.xts(data, main="Title", multi.panel=TRUE, minor.ticks=FALSE, yax.right=FALSE)


标签: r plot xts