[R] Thinking about using two y-scales on your plot?

Jim Lemon jim at bitwrit.com.au
Thu Apr 3 12:55:13 CEST 2008


Allen S. Rout wrote:
> ...
> I've got a series of graphs I generate in R to illustrate backup
> activity.  These are scaled, primarily, in bytes.  But different
> activities have different costs per byte, and I augment the bytes
> scale with dollars.
> 
> http://docs.osg.ufl.edu/tsm/current/ext/UFEXCH-MBX01.AD.UFL.EDU-all.html
> 
> So the blue series corresponds to tbe blue dollars scale (and bytes)
> and the green and red points correspond to the green scale (and
> bytes).
> 
> Am I being naughty? 
> 
Hi Allen,
If misleading someone is naughty, I guess we've all done that...
The difficulty you have is the visual impression that the storage 
charges are higher than the transfer charges. You are trying to squeeze 
three dimensions (daily amount of information, daily cost of transfer 
and daily cost of storage) into two. Because the values are actually 
plotted against the first dimension and the cost scales are tacked on to 
that, only in the case where both of the latter dimensions coincide 
would the visual metric correspond to the numbers. Then you wouldn't 
have a problem, of course. I would tend to make the visual comparison on 
the money dimension and add supplementary axes showing the amount of 
information for each aspect of the cost. Here's a rough example:

# estimate the first two weeks of data
ufexch<-data.frame(transGb=
  c(450,700,200,550,550,545,550,550,195,180,555,555,550,550),
storGb=c(900,1000,1020,1025,1030,1035,1045,1045,
  1050,1050,1050,1055,1060,1065))
# roughly calculate dollars per day
ufexch$transdd<-ufexch$transGb/2
ufexch$stordd<-ufexch$storGb/1111
par(mar=c(5,4,4,4))
plot(c(ufexch$transdd,NA,0.2),xlim=c(1,14),ylim=c(0.2,400),col="green",
  pch=2,log="y",main="Cost of backups",ylab="Dollars/day",xlab="Date",
  axes=FALSE,type="b")
points(ufexch$stordd,col="blue",pch=1,type="b")
box()
axis(2)
axis(1,at=1:14,labels=paste(1:14,"Feb",sep="/"))
axis(4,at=c(100,300,500),labels=c(500,800,1000),col="green")
axis(4,at=c(0.5,0.9,1.4),labels=c(500,900,1400),col="blue")
mtext("Gigabytes",4,2)
legend(6,20,c("Storage","Transfer"),pch=1:2,col=c(4,3))

Jim



More information about the R-help mailing list