[R] how to plot y-axis on the right of x-axis

Antonio Olinto aolinto_r at bignet.com.br
Wed Aug 25 15:03:18 CEST 2010


Dear Elaine

I'm developing a code to make a 3 y-axes plot. It may can help you.

Also your question leads to mine, posted yesterday: How does R  
calculate the interval between tick-marks.

Below follows the code I'm developing.

Data:

ANO	CKG	        NUP	NDE
2005	26352158	1500	25014
2006	32514789	2100	35024
2007	27458126	1800	30254
2008	28568971	1500	43254
2009	32564789	3000	60320

Code:

# I use comma as decimal symbol so I use dec=","
dat.caupde <- read.delim("clipboard",dec=",",header=T)

attach(dat.caupde)
summary(dat.caupde)
       ANO            CKG                NUP            NDE
  Min.   :2005   Min.   :26352158   Min.   :1500   Min.   :25014
  1st Qu.:2006   1st Qu.:27458126   1st Qu.:1500   1st Qu.:30254
  Median :2007   Median :28568971   Median :1800   Median :35024
  Mean   :2007   Mean   :29491767   Mean   :1980   Mean   :38773
  3rd Qu.:2008   3rd Qu.:32514789   3rd Qu.:2100   3rd Qu.:43254
  Max.   :2009   Max.   :32564789   Max.   :3000   Max.   :60320

# here I indicate the limits of each axes and calculate their ranges
y1min <- 26
y1max <- 33
y1range <- y1max-y1min
y2min <- 1500
y2max <- 3000
y2range <- y2max-y2min
y3min <- 25
y3max <- 61
y3range <- y3max-y3min

# making the plot
# y1range*((NUP-y2min)/y2range)+y1min calculates the proportion to  
between axes

par(mar=c(6, 6, 2,12))
plot(CKG/1000000, ylim=c(y1min,y1max), ylab="landings (1000 t)",  
type="l",col="red",las=0, cex.axis=1.2,cex.lab=1.4,xaxt="n",xlab="")
points( y1range*((NUP-y2min)/y2range)+y1min,type="l",col="blue")
points( y1range*((NDE/1000-y3min)/y3range)+y1min,type="l",col="darkgreen")

# the number 1 in axis(4,at=seq(y1min,y1max,1 ... is the interval  
between each tick-mark
axis(1,at=1:5,labels=as.character(ANO),las=2,cex.axis=1.2)
axis(4,at=seq(y1min,y1max,1),labels=as.integer(seq(y2min,y2max,y2range/y1range)),las=0,cex.axis=1.2)
axis(4,at=seq(y1min,y1max,1),  
labels=as.integer(seq(y3min,y3max,y3range/y1range)),cex.axis=1.2,  
las=0,line=5)
mtext("nº of fishing boats",4,3,cex=1.4)
mtext("nº of fishing trips (x1000)",4,8, cex=1.4)
legend(4,33,c("L","Nº FB","Nº  
FT"),bty="n",lty=c(1,1,1),col=c("red","blue","darkgreen"),cex=1.4)

Now I want to replace the number "1" by the formula used to calculate  
the interval between tick-marks. Why, with the range 26-33, R choose  
unitary intervals for the y axis (26, 27, 28 ...)?

All the best,

Antonio Olinto


Citando elaine kuo <elaine.kuo.tw em gmail.com>:

> Dear List,
>
> I have a richness data distributing across 20 N to 20 S latitude. (120 E-140
> E longitude).
>
>
> I would like to draw the richness in the north hemisphere and a regression
> line in the plot
> (x-axis: latitude, y-axis: richness in the north hemisphere).
> The above demand is done using plot.
>
> Then, south hemisphere richness and regression are required to be generated
> using
> the same y-axis above but an x-axis on the left side of the y-axis.
> (The higher latitude in the south hemisphere, the left it would move)
>
> Please kindly share how to design the south plot and regression line for
> richness.
> Also, please advise if any more info is in need.
>
> Elaine
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help em 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.
>



----------------------------------------------------------------
Webmail - iBCMG Internet
http://www.ibcmg.com.br



More information about the R-help mailing list