Ajay Shah
2004-Mar-17 02:00 UTC
[R] Plot 2 time series with different y axes (left and right)
Petr Pikal said:> I am not really a R specialist but for this task I use function:and he pasted his code into the email. I reindented the code, and wrote a fragment to experiment with it. Here it is: --------------------------------------------------------------------------- plot.yy <- function(x, yright, yleft, yleftlim=NULL, yrightlim = NULL, xlab = NULL, yylab=c("",""), pch=c(1,2), col=c(1,2), linky=F, smooth=0, lwds=1, length=10, format="%d-%H:%M", ... ) { par(mar=c(5,4,4,2),oma=c(0,0,0,3)) plot(x, yright, ylim=yrightlim, axes=F,ylab="", xlab=xlab, pch=pch[1],col=col[1], ...) axis(4,pretty(range(yright,na.rm=T),10),col=col[1]) if (linky) lines(x,yright,col=col[1], ...) if (smooth!=0) lines(supsmu(x,yright,span=smooth),col=col[1], lwd=lwds, ...) if(yylab[1]=="") mtext(deparse(substitute(yright)),side=4,outer=T,line=1, col=col[1], ...) else mtext(yylab[1],side=4,outer=T,line=1, col=col[1], ...) par(new=T) plot(x,yleft, ylim=yleftlim, ylab="", axes=F ,xlab=xlab, pch=pch[2],col=col[2], ...) box() axis(2,pretty(range(yleft,na.rm=T),10),col=col[2], col.axis=col[2]) if (is.null(class(x))) axis(1,pretty(range(x,na.rm=T),10)) else { l<-length(x) axis(1,at=x[seq(1,l,length=length)], labels=format(as.POSIXct(x[seq(1,l,length=length)]), format=format)) } if(yylab[2]=="") mtext(deparse(substitute(yleft)),side=2,line=2, col=col[2], ...) else mtext(yylab[2],side=2,line=2, col=col[2], ...) if (linky) lines(x,yleft,col=col[2], lty=2, ...) if (smooth!=0) lines(supsmu(x,yleft,span=smooth),col=col[2], lty=2, lwd=lwds, ...) } # I wrote some code in order to try out the plot.yy() function -- x = 1990:2000; y1 = 100*rnorm(11) y2 = 200*rnorm(11) plot.yy(x, y1, y2, yylab=c("Y axis 1", "Y axis 2"), linky=T, smooth=0, lwds=3, length=10) --------------------------------------------------------------------------- Thanks! This gave me lots of ideas. When I run this code, I get the error -- Error in as.POSIXct.default(x[seq(1, l, length = length)]) : Don't know how to convert `x[seq(1, l, length = length)]' to class "POSIXct" Execution halted I also find that one of the two series is not `linked' (in your notation). I also find that the y label "Y axis 2" does not appear. Any ideas? Thanks again, -ans. -- Ajay Shah Consultant ajayshah at mayin.org Department of Economic Affairs http://www.mayin.org/ajayshah Ministry of Finance, New Delhi