Re: [R] plotmath vector problem; full program enclosed

2010-07-07 Thread Paul Johnson
On Tue, Jul 6, 2010 at 12:41 PM, Duncan Murdoch
murdoch.dun...@gmail.com wrote:
 On 06/07/2010 10:54 AM, Paul Johnson wrote:

 Here's another example of my plotmath whipping boy, the Normal
 distribution.

 You want as.expression(b1), not expression(b1).  The latter means the
 expression consisting of the symbol b1.  The former means take the object
 stored in b1, and convert it to an expression..

 It's not perfect, because you'll end up with mu - -1.96sigma (i.e. two
 minus signs), but it's closer than what you had.

 Duncan Murdoch



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?

-- 
Paul E. Johnson
Professor, Political Science
1541 Lilac Lane, Room 504
University of Kansas

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


Re: [R] plotmath vector problem; full program enclosed

2010-07-07 Thread Allan Engelhardt


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 mepaulj...@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]]

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


Re: [R] plotmath vector problem; full program enclosed

2010-07-07 Thread Allan Engelhardt

Ooops, I didn't convert this one to text right for the list.

b1- substitute( mu - d*sigma, list(d=*-round(dividers[1],2))*  )


should be

b1- substitute( mu - d*sigma, list(d=-round(dividers[1],2))  )


and similarly for

labels=*as.expression(c(b1,b2,b3,b4,b5))*, padj=-1)

read

labels=as.expression(c(b1,b2,b3,b4,b5)), padj=-1)

Apologies


Allan

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


Re: [R] plotmath vector problem; full program enclosed

2010-07-07 Thread Duncan Murdoch

On 07/07/2010 1:03 AM, Paul Johnson wrote:

On Tue, Jul 6, 2010 at 12:41 PM, Duncan Murdoch
murdoch.dun...@gmail.com wrote:
  

On 06/07/2010 10:54 AM, Paul Johnson wrote:


Here's another example of my plotmath whipping boy, the Normal
distribution.

  

You want as.expression(b1), not expression(b1).  The latter means the
expression consisting of the symbol b1.  The former means take the object
stored in b1, and convert it to an expression..

It's not perfect, because you'll end up with mu - -1.96sigma (i.e. two
minus signs), but it's closer than what you had.

Duncan Murdoch





Hi, Duncan and David

Thanks for looking.  I suspect from the comment you did not run the
code.


And I'm certain from your comment that you didn't run my code, or read 
the explanation carefully.


Duncan Murdoch

  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?




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


Re: [R] plotmath vector problem; full program enclosed

2010-07-07 Thread Paul Johnson
On Wed, Jul 7, 2010 at 5:41 AM, Duncan Murdoch murdoch.dun...@gmail.com wrote:



 You want as.expression(b1), not expression(b1).  The latter means
 the
 expression consisting of the symbol b1.  The former means take the
 object
 stored in b1, and convert it to an expression..


Thanks to Duncan and Allen, who pointed out that I was not even
reading my own code carefully.  I apologize for trying your patience.

Before I stop swinging at this one, I still want to bother everybody
about one thing, which really was the original question, but I did not
know the words to ask it.

The full code below is a working example that works, but I don't
understand why. Focus on these two commands that produce 2 axes.  Both
produce the desired output, but, as far as I can see, they should not!

1:
   axis(1, line=6, at=mu+dividers*sigma,
labels=as.expression(c(b1,b2,b3,b4,b5), padj=-1))


2:
   axis(1, line=9, at=mu+dividers*sigma,
labels=c(as.expression(b1),b2,b3,b4,b5), padj=-1)

This second one shouldn't work, I think.
It has as.expression on only the first element, and yet they all come
out right. Is there a spill over effect?

My original question should not have asked why b1 does not print
correctly when I do this:

   axis(1, line=9, at=mu+dividers*sigma,
labels=c(expression(b1),b2,b3,b4,b5), padj=-1)

but the correct question should have been why do b2, b3, b4 , and b5
get processed properly into plot math even though they are not
expressions??

???
pj

### Filename: plotMathProblem.R
### Paul Johnson July 7, 2010
### email me paulj...@ku.edu

  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)

   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)) )
   axis(1, line=4, at=mu+dividers*sigma, labels=c(b1,b2,b3,b4,b5), padj=-1)


   axis(1, line=6, at=mu+dividers*sigma,
labels=as.expression(c(b1,b2,b3,b4,b5), padj=-1))



   axis(1, line=9, at=mu+dividers*sigma,
labels=c(as.expression(b1),b2,b3,b4,b5), padj=-1)


-- 
Paul E. Johnson
Professor, Political Science
1541 Lilac Lane, Room 504
University of Kansas

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


Re: [R] plotmath vector problem; full program enclosed

2010-07-07 Thread Allan Engelhardt

On 07/07/10 18:52, Paul Johnson wrote:
 [...]
 1:
 axis(1, line=6, at=mu+dividers*sigma,
 labels=as.expression(c(b1,b2,b3,b4,b5), padj=-1))


 2:
 axis(1, line=9, at=mu+dividers*sigma,
 labels=c(as.expression(b1),b2,b3,b4,b5), padj=-1)

 This second one shouldn't work, I think.
 It has as.expression on only the first element, and yet they all come
 out right. Is there a spill over effect?


You can call it spill-over if you want: c() makes a *vector*, not a 
list, so all elements have to be of the same type and they are all 
coerced to the more general type (the first).  It is similar to

  c(1, 2, 3)
[1] 1 2 3

which is different from c(1, 2, 3).

Hope this helps

Allan

PS: BTW, I think the () are wrong in example 1? :-)


[[alternative HTML version deleted]]

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


[R] plotmath vector problem; full program enclosed

2010-07-06 Thread Paul Johnson
Here's another example of my plotmath whipping boy, the Normal distribution.

A colleague asks for a Normal plotted above a series of axes that
represent various other distributions (T, etc).

I want to use vectors of equations in plotmath to do this, but have
run into trouble.  Now I've isolated the problem down to a relatively
small piece of working example code (below).  If you would please run
this, I think you will see the problem.  When plotmath meets one
vector of expressions, it converts all but one to math, so in the
figure output i get, in LaTeX speak

b1 $\mu-1.0 \sigma$$\mu$

All values except the first come out correctly.

This happens only when I try to use bquote or substitute to get
variables to fill in where the 1.96, 1.0, and so forth should be.  In
the figure output, you should see a second axis where all of the
symbols are resolved correctly.

As usual, thanks in advance for your help, sorry if I've made an
obvious mistake or overlooked a manual.

### Filename: plotMathProblem.R
### Paul Johnson July 5, 2010
### email me paulj...@ku.edu

  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=c(expression(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)




-- 
Paul E. Johnson
Professor, Political Science
1541 Lilac Lane, Room 504
University of Kansas

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


Re: [R] plotmath vector problem; full program enclosed

2010-07-06 Thread Duncan Murdoch

On 06/07/2010 10:54 AM, Paul Johnson wrote:

Here's another example of my plotmath whipping boy, the Normal distribution.

A colleague asks for a Normal plotted above a series of axes that
represent various other distributions (T, etc).

I want to use vectors of equations in plotmath to do this, but have
run into trouble.  Now I've isolated the problem down to a relatively
small piece of working example code (below).  If you would please run
this, I think you will see the problem.  When plotmath meets one
vector of expressions, it converts all but one to math, so in the
figure output i get, in LaTeX speak

b1 $\mu-1.0 \sigma$$\mu$

All values except the first come out correctly.

This happens only when I try to use bquote or substitute to get
variables to fill in where the 1.96, 1.0, and so forth should be.  In
the figure output, you should see a second axis where all of the
symbols are resolved correctly.

As usual, thanks in advance for your help, sorry if I've made an
obvious mistake or overlooked a manual.

### Filename: plotMathProblem.R
### Paul Johnson July 5, 2010
### email me paulj...@ku.edu

  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=c(expression(b1),b2,b3,b4,b5), padj=-1)
  


You want as.expression(b1), not expression(b1).  The latter means 
the expression consisting of the symbol b1.  The former means take 
the object stored in b1, and convert it to an expression..


It's not perfect, because you'll end up with mu - -1.96sigma (i.e. two 
minus signs), but it's closer than what you had.


Duncan Murdoch





### 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)







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


Re: [R] plotmath vector problem; full program enclosed

2010-07-06 Thread David Winsemius


On Jul 6, 2010, at 1:41 PM, Duncan Murdoch wrote:


On 06/07/2010 10:54 AM, Paul Johnson wrote:
Here's another example of my plotmath whipping boy, the Normal  
distribution.


A colleague asks for a Normal plotted above a series of axes that
represent various other distributions (T, etc).

I want to use vectors of equations in plotmath to do this, but have
run into trouble.  Now I've isolated the problem down to a relatively
small piece of working example code (below).  If you would please run
this, I think you will see the problem.  When plotmath meets one
vector of expressions, it converts all but one to math, so in the
figure output i get, in LaTeX speak

b1 $\mu-1.0 \sigma$$\mu$

All values except the first come out correctly.

This happens only when I try to use bquote or substitute to get
variables to fill in where the 1.96, 1.0, and so forth should be.  In
the figure output, you should see a second axis where all of the
symbols are resolved correctly.

As usual, thanks in advance for your help, sorry if I've made an
obvious mistake or overlooked a manual.

### Filename: plotMathProblem.R
### Paul Johnson July 5, 2010
### email me paulj...@ku.edu

 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=c(expression(b1),b2,b3,b4,b5), padj=-1)



You want as.expression(b1), not expression(b1).  The latter  
means the expression consisting of the symbol b1.  The former  
means take the object stored in b1, and convert it to an  
expression..


It's not perfect, because you'll end up with mu - -1.96sigma (i.e.  
two minus signs), but it's closer than what you had.


Easily addressed in this case with ~ instead of -. The value of  
d provides the minus:


b1 - substitute( mu ~ d*sigma, list(d=round(dividers[1],2)) )



Duncan Murdoch





### 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)








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


David Winsemius, MD
West Hartford, CT

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


Re: [R] plotmath vector problem; full program enclosed

2010-07-06 Thread Allan Engelhardt



On 06/07/10 18:51, David Winsemius wrote:


Easily addressed in this case with ~ instead of -. The value of 
d provides the minus:


b1 - substitute( mu ~ d*sigma, list(d=round(dividers[1],2)) )


Neat trick!  But it gives a slightly different minus sign in the 
display, so perhaps simply


b1- substitute( mu - d*sigma, list(d=-round(dividers[1],2)) )


instead?

Allan

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


Re: [R] plotmath vector problem; full program enclosed

2010-07-06 Thread Charles C. Berry

On Tue, 6 Jul 2010, David Winsemius wrote:



On Jul 6, 2010, at 1:41 PM, Duncan Murdoch wrote:


On 06/07/2010 10:54 AM, Paul Johnson wrote:
 Here's another example of my plotmath whipping boy, the Normal 
 distribution.
 
 A colleague asks for a Normal plotted above a series of axes that

 represent various other distributions (T, etc).
 
 I want to use vectors of equations in plotmath to do this, but have

 run into trouble.  Now I've isolated the problem down to a relatively
 small piece of working example code (below).  If you would please run
 this, I think you will see the problem.  When plotmath meets one
 vector of expressions, it converts all but one to math, so in the
 figure output i get, in LaTeX speak
 
 b1 $\mu-1.0 \sigma$$\mu$
 
 All values except the first come out correctly.
 
 This happens only when I try to use bquote or substitute to get

 variables to fill in where the 1.96, 1.0, and so forth should be.  In
 the figure output, you should see a second axis where all of the
 symbols are resolved correctly.
 
 As usual, thanks in advance for your help, sorry if I've made an

 obvious mistake or overlooked a manual.
 
 ### Filename: plotMathProblem.R

 ### Paul Johnson July 5, 2010
 ### email me paulj...@ku.edu
 
  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=c(expression(b1),b2,b3,b4,b5), padj=-1)
 

You want as.expression(b1), not expression(b1).  The latter means the 
expression consisting of the symbol b1.  The former means take the object 
stored in b1, and convert it to an expression..


It's not perfect, because you'll end up with mu - -1.96sigma (i.e. two 
minus signs), but it's closer than what you had.


Easily addressed in this case with ~ instead of -. The value of d 
provides the minus:


b1 - substitute( mu ~ d*sigma, list(d=round(dividers[1],2)) )



But if d = 0, there will be no sign so maybe use

b1 - substitute( mu ~ d*sigma, list(d=sprintf(%+.2f, dividers[1]))) 
b5 - substitute( mu ~ d*sigma, list(d=sprintf(%+.2f, dividers[5])))


etc.

Chuck



Duncan Murdoch

 
 
 
 ### 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)
 
 
 
 
 


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


David Winsemius, MD
West Hartford, CT

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



Charles C. Berry(858) 534-2098
Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu   UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901