On 02/03/2014 06:09 AM, David Parkhurst wrote:
I've tried to figure out how to do this from what I read, but haven't
been successful. Suppose I have a dataframe with variables Date, X, and
Y (and maybe U, V, and Z) where X, Y, etc. have different units. I'd
like to plot Y vs. Time above X vs. Time, above one another.

For example, X is the number of gulls counted on a reservoir, and Y is
the number of coliform bacteria counted on a petri plate from a water
sample leaving the reservoir, so these have very different ranges. U and
V might be numbers of geese and numbers of ducks counted on the same days.

What commands would I use to create such a set of plots?

Hi David,
If you did want dual axes, rather than leave you sitting there with your boss saying, "Why don't you just use Excel, David?", I'll give a couple of methods.

One of the bazillion ways mentioned is the twoord.plot function in the plotrix package. I'm currently working on a way to make it easier to separate the different values, so I'll give a detailed example. This example was inspired by my good fortune some years ago to have the use of an outdoor pool at work in which I swam each morning. There were a lot of ducks that liked the pool, too.

pool_obs<-paste(1,1:12,2007,sep="/")
n_ducks<-c(8,5,6,7,3,2,4,5,6,9,8,7)
duck_splotches<-c(22,28,23,18,21,19,15,11,12,14,12,16)
duck_pool<-data.frame(pool_obs,n_ducks,duck_splotches)
duck_pool$pool_obs<-as.Date(duck_pool$pool_obs,"%d/%m/%Y")
# the easy way
library(plotrix)
twoord.plot("pool_obs","n_ducks","pool_obs","duck_splotches",
 duck_pool,
 ylab="Number of ducks observed",
 rylab="Number of duck splotches in pool",
 xlab="Date",lylim=c(0,30),rylim=c(0,30),
 xtickpos=duck_pool$pool_obs,
 xticklab=month.abb,
 main="Duck splotch throughout the year")

You can separate the two series like this:

axis.break(2,10,style="gap")

You can do what I am presently doing to twoord.plot like this:

plot(duck_pool$pool_obs,duck_pool$duck_splotches,ylim=c(0,30),
 axes=FALSE,ylab="Number of duck splotches in pool",xlab="Date",
 main="Duck splotch throughout the year",type="b")
staxlab(1,at=duck_pool$pool_obs,labels=month.abb)
axis(2,at=seq(10,30,by=5))
box()
points(duck_pool$pool_obs,duck_pool$n_ducks,
 type="b",pch=2,col="red")
axis(4,at=seq(0,10,by=5),col="red")
mtext("Number of ducks observed",side=4,at=6,line=2,col="red")

and of course you can stick in the axis break if you like. You can also fiddle the values and the two axes so that the two series don't overlap on the plot even if they do numerically. There is the possibility of just putting two plots one above the other if you really don't want the two series on the same plot.

Jim

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to