# [R] Suggestions ?!?!

Jason Turner jasont at indigoindustrial.co.nz
Tue Feb 24 23:27:45 CET 2004

```"ivo welch" <ivo.welch at yale.edu> said...
> * Finally, a more complex question: I have a historical rate of stock
> return series (yes, I teach finance).  I would like to make a ts plot on
> the left (plot(date,returns,type="h")), and a plot(density(returns)) on
> the right.  works nicely with par(mfrow=c(1,2)), but it would be even
> nicer if I could rotate the density plot 90 degrees, so that it is more
> apparent that the density plot is an aggregation of the points at the
> same y coordinates.  (if need be, a histogram could replace the density
> plot.)  Is it possible to rotate an entire subpanel figure.  if there
> was a "horizontal" parameter to ps.options for plot(), it would do the
> trick, but this does not work.   So, this may be a suggestion, too.

There might be a more natural way to do this using grid graphics, but I'm
still not familiar with grid.  This type of plot is one I do enough of
that I rolled by own the old-fashioned way.

Try

zz <- ts(rnorm(100))
DenTSplot(zz)

## ts and density
DenTSplot <- function(x, ylim=NULL,main=NULL,...) {
# data sanity check
if(!is.ts(x))
x <- ts(x)
if(!is.null(dim(x))) {
stop("can only handle univariate time series\n")
}

# set layout - FIXME - should this be user-setable?
layout(matrix(c(1,1,1,2),nrow=1))

# find x density.  FIXME - need to take arguments about
# bandwidth selector, etc.
x.d <- density(x)

if(is.null(ylim)) {
ylim <- range(x.d\$x)
}
if(is.null(main))
main <- "Series"

on.exit(par(opar))
mai <- par("mai")
mai.ts <- c(mai[1:3],0)
par(mai=mai.ts)
plot(x,ylim=ylim,main=main,...)

mai.den <- c(mai,0,mai[3:4])
par(mai=mai.den)
plot(x.d\$y, x.d\$x,
ylim=ylim, type="l", yaxt="n",
ylab="",xlab="",main="Density")
}

```