

On 07/07/10 06:03, Paul Johnson wrote:
> [...]
> Hi, Duncan and David
>
> Thanks for looking.  I suspect from the comment you did not run the
> code.  The expression examples I give do work fine already.  But I
> have to explicitly put in values like 1.96 to make them work.  I'm
> trying to avid that with substitute, which does work for b2, b3, b4,
> b5, all but b1.  Why just one?
>
> I'm uploading a picture of it so you can see for yourself:
>
> http://pj.freefaculty.org/R/plotmathwrong.pdf
>
> please look in the middle axis.
>
> Why does only b1 not work, but the rest do?
>
>    

Because you only had one (as.)expression in your original code, 
perhaps?  This version works for me:

### Filename: plotMathProblem.R
### Paul Johnson July 5, 2010
### email me<pauljohn@ku.edu>
### 2010-07-06 AE : Changes.

   sigma<- 10.0
   mu<- 4.0

   myx<- seq( mu - 3.5*sigma,  mu+ 3.5*sigma, length.out=500)

   myDensity<- dnorm(myx,mean=mu,sd=sigma)

   ### xpd needed to allow writing outside strict box of graph
   ### Need big bottom margin to add several x axes
   par(xpd=TRUE, ps=10, mar=c(18,2,2,2))

   plot(myx, myDensity, type="l", xlab="", ylab="Probability Density ",
main=myTitle1, axes=FALSE)
   axis(2, pos= mu - 3.6*sigma)
   axis(1, pos=0)

   lines(c(myx[1],myx[length(myx)]),c(0,0)) ### closes off axes


   addInteriorLine<- function(x, m, sd){
     for (i in 1:(length(x))){
       lines( c(x[i],x[i]), c(0, dnorm(x[i],m=m,sd=sd)), lty= 14, lwd=.2)
     }
   }


   dividers<- c(qnorm(0.025), -1, 0, 1, qnorm(0.975))
   addInteriorLine(mu+sigma*dividers, mu,sigma)

   # bquote creates an expression that text plotters can use
   t1<-  bquote( mu== .(mu))
   mtext(bquote( mu == .(mu)), 1, at=mu, line=-1)


   addInteriorLabel<- function(pos1, pos2, m, s){
     area<- abs(100*( pnorm(m+pos1*s,m,s)-pnorm(m+pos2*s, m,s)))
     mid<- m+0.5*(pos1+pos2)*s
     text(mid, 0.5*dnorm(mid,m,s),label=paste(round(area,2),"%"))
   }


   addInteriorLabel(dividers[1],dividers[2],  mu, sigma)
   addInteriorLabel(dividers[2],dividers[3],  mu, sigma)
   addInteriorLabel(dividers[3],dividers[4],  mu, sigma)
   addInteriorLabel(dividers[4],dividers[5],  mu, sigma)




### Following is problem point: axis will
### end up with correct labels, except for first point,
### where we end up with "b1" instead of "mu - 1.96*sigma".
    b1<- substitute( mu - d*sigma, list(d=*-round(dividers[1],2))*  )
    b2<- substitute( mu - sigma )
    b3<- substitute( mu )
    b4<- substitute( mu + sigma )
    b5<- substitute( mu + d*sigma, list(d=round(dividers[5],2)) )
##   plot(-20:50,-20:50,type="n",axes=F)
    axis(1, line=4,at=mu+dividers*sigma,
labels=*as.expression(c(b1,b2,b3,b4,b5))*, padj=-1)




### This gets "right result" but have to hard code the dividers
   b1<- expression( mu - 1.96*sigma )
   b2<- expression( mu - sigma )
   b3<- expression( mu )
   b4<- expression( mu + sigma )
   b5<- expression( mu + 1.96*sigma )
   axis(1, line=8,at=mu+dividers*sigma, labels=c(b1,b2,b3,b4,b5), padj=-1)




Allan

	[[alternative HTML version deleted]]

