Hi Hurr

I'm getting curious!

You have now spent several weeks on this plot. One reason to do this if the journal request it. Is that the case?

Or is it your own hard minded way to have your plot made the way you like.

In my mind a very good plot support ones data.  Is that what you want? Does it then matters with details?

Br.

Frede


Sendt fra Samsung mobil


-------- Oprindelig meddelelse --------
Fra: Hurr
Dato:28/05/2014 19.03 (GMT+01:00)
Til: r-help@r-project.org
Emne: Re: [R] Second axis on bottom of graph

Thank you Jeff for your good orientation. You are an educator.
I looked at the documentation for more than an hour.
Yes, there is a big learning curve.
My R-coding friend doesn't know it either.
Here is runnable code for a graph I would like to redo in the better code.
The staxlab function was sent to me by the author.
The remainder code isn't so long.
An expert could rewrite it quickly. Any out there?

#trying for both period-labeled and frequency-labeled horizontal axes
rm(list=ls(all=TRUE))
install.packages('plotrix'); library(plotrix)
#install.packages('lattice'); library(lattice)
#install.packages('ggplot2'); library(ggplot2)
#staxlab (to be standard soon) sent by author so staxlab works on second x
axis.
staxlab<-function(side=1,at,labels,nlines=2,top.line=0.5,
 line.spacing=0.8,srt=NA,ticklen=0.03,adj=1,...) {
 if(missing(labels)) labels<-at
 nlabels<-length(labels)
 if(missing(at)) at<-1:nlabels
 axislim<-par("usr")[3:4-2*side%%2]
 if(any(at < axislim[1]) || any(at > axislim[2]))
  warning("Some axis labels are off the plot")
 if(is.na(srt)) {
  linepos<-rep(top.line,nlines)
  for(i in 2:nlines) linepos[i]<-linepos[i-1]+line.spacing
  linepos<-rep(linepos,ceiling(nlabels/nlines))[1:nlabels]
  axis(side=side,at=at,labels=rep("",nlabels))
  mtext(text=labels,side=side,line=linepos,at=at,...)
 }
 else {
  linewidth<-strheight("M")
  xylim<-par("usr")
  if(side == 1) {
   xpos<-at
   if(par("ylog")) ypos<-10^(xylim[3]-ticklen*(xylim[4]-xylim[3]))
   else ypos<-xylim[3]-ticklen*(xylim[4]-xylim[3])-top.line*linewidth
  }
  if(side == 3) {
   xpos<-at
   if(par("ylog")) ypos<-10^(xylim[4]+ticklen*(xylim[4]-xylim[3]))
   else ypos<-xylim[4]+ticklen*(xylim[4]-xylim[3])+top.line*linewidth
  }
  if(side == 2) {
   ypos<-at
   if(par("xlog")) xpos<-10^(xylim[1]-ticklen*(xylim[2]-xylim[1]))
   else xpos<-xylim[1]-ticklen*(xylim[2]-xylim[1])-top.line*linewidth
  }
  if(side == 4) {
   ypos<-at
   if(par("xlog")) xpos<-10^(xylim[2]+ticklen*(xylim[2]-xylim[1]))
   else xpos<-xylim[2]+ticklen*(xylim[2]-xylim[1])+top.line*linewidth
  }
  par(xpd=TRUE)
  text(xpos,ypos,labels,srt=srt,adj=adj,...)
  par(xpd=FALSE)
 }
}
par(lheight=0.7)#vertical text space = lheight * char height * character
expansion
par(mar=c(8,4,4,2)+.1)  #margins: mar=c(bot,lef,top,rit);
default:c(5,4,4,2)+.1
par(xaxs="i") #to make 2nd axis and plot width size match; others: xaxs=
"r", "i", "e", "s", "d".
par(mgp=c(3,.5,0)) #default mgp=c(3,1,0) margin line in mex units
c(axisTitle,axisLabel,axisLine)
#set only by
par():ask,fig,fin,lheight,mai,mar,mex,mfcol,mfrow,mfg,new,oma,omd,omi,pin,plt,ps,pty,usr,xlog,ylog,ylbias
prdAxDistDown=0; frqAxDistDown=2.25;

horAxFrqCntrlNums=c(-10.0,0.0,1.1,500.0,515.0)
#=c(lefGrafBordFrq,lefScalEndFrq,lefPlotEndFrq,ritPlotEndFrq,ritScalEndFrq)
horData=c(1.100,56.53,112.0,167.4,222.8,278.3,333.7,389.1,444.6,500.0)
verData=c(57.67,98.33,82.40,68.15,78.89,93.53,22.54,37.60,87.19,49.35)
prdTicLocs=c(1.10,12,52.2,91.3, 122, 183, 365,500)
prdLabels=c("10.9\nMo","1Mo","1Wk","4Da","3Da","2Da","1Da","17.5\nHr")

print(horAxFrqCntrlNums); print(prdLabels)
nFrqTicInvls=9; frqTicLocs <- vector(length=nFrqTicInvls+1); frqLabels <-
vector(length=nFrqTicInvls+1);
frqInvl=(horAxFrqCntrlNums[5]-horAxFrqCntrlNums[2])/nFrqTicInvls
for(i in
1:(nFrqTicInvls+1))frqTicLocs[i]=horAxFrqCntrlNums[2]+(i-1)*frqInvl;
for(i in
1:(nFrqTicInvls+1))frqLabels[i]=format(round(frqTicLocs[i]),digits=4,trim=TRUE,scientific=FALSE)
print(frqTicLocs); print(frqLabels)
las=2; #las=2 makes axis labels perpendicular to axis
plot(horData,verData,xaxt='n',xlim=c(horAxFrqCntrlNums[1],horAxFrqCntrlNums[5]),xlab="",ylab="")
axis(2,tick=TRUE,line=0,at=NULL) #side: 1=below, 2=left, 3=above and 4=right
#tck if >= 0.5 then fraction of relevant side; if =1 then gridlines
axis(1,tick=TRUE,line=prdAxDistDown,at=prdTicLocs,labels=rep("",length(prdLabels)),padj=0,tck=-.04)
staxlab(1,top.line=(prdAxDistDown-0.8),at=prdTicLocs,labels=prdLabels,srt=90,adj=c(1,0))
axis(1,tick=TRUE,line=frqAxDistDown,at=frqTicLocs,labels=rep("",length(frqLabels)),padj=0,tck=-.04)
staxlab(1,top.line=(frqAxDistDown+0.2),at=frqTicLocs,labels=frqLabels,srt=90,adj=c(1,0))
title(xlab="Cycles/Yr",line=4); title(ylab="verData",line=1.5);
title(main="Trying Both Frequency And Period Axes")




--
View this message in context: http://r.789695.n4.nabble.com/Second-axis-on-bottom-of-graph-tp4690696p4691377.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
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.

	[[alternative HTML version deleted]]

