[R] math symbol + value of a variable in legend.
William Dunlap
wdunlap at tibco.com
Thu Aug 27 20:18:11 CEST 2009
> -----Original Message-----
> From: r-help-bounces at r-project.org
> [mailto:r-help-bounces at r-project.org] On Behalf Of Martin Maechler
> Sent: Thursday, August 27, 2009 1:30 AM
> To: Kenneth Roy Cabrera Torres
> Cc: RHelp
> Subject: Re: [R] math symbol + value of a variable in legend.
>
> >>>>> "KRCT" == Kenneth Roy Cabrera Torres <krcabrer at une.net.co>
> >>>>> on Tue, 25 Aug 2009 17:26:04 -0500 writes:
>
> KRCT> Thank you very much for your help.
>
> KRCT> To the R gurus: It will be better at the future to
> simplify this
> KRCT> options.
>
> KRCT> They are too cumbersome!!!
>
> The ones David showed, yes, are too cumbersome.
>
> There's a variant, which is even a bit more elegant,
> but really a small (?) change in R's handling of "symbols" could
> make it even more elegant.
> I'll talk about that on the dedicated list, R-devel.
>
> Here's the slightly more elegant code (for current versions of R):
>
> plot(1:5,1:5,type="n")
> legend("topleft", legend=
> c(as.expression( bquote(mu == .(m1)) ),
> as.expression( bquote(mu == .(m2)) )), lty = 1:2)
Another version that is more easily extendable to longer legends is
legend("topright", lty=1:2, legend=
as.expression(lapply(c(m1,m2), function(m)bquote(mu==.(m)))))
Another example is:
m <- c(1,exp(1),pi)
plot(m, pch=seq_along(m), xlab=expression(iota), ylab=quote(e^c(0,1,log(pi))))
legend("bottom", pch=seq_along(m), legend=as.expression(lapply(seq_along(m),function(i)bquote(m[.(i)]==.(m[i])))))
Note that xlab and ylab can be either expressions or calls
(or, in general, language objects) but legend must be an expression for
this to work.
If legend is a list of calls, as in the more direct
legend("bottomright", pch=seq_along(m), legend=lapply(seq_along(m),function(i)bquote(m[.(i)]==.(m[i]))))
then it looks like its elements are coerced to character strings (via deparse).
If legend's legend= argument would interpret lists differently than it does,
treating elements which are expressions or calls as plotmath requests
and other types as things to convert to strings, then I think the syntax
would be simpler. E.g., your example could be
legend("bottomleft", legend=list(bquote(mu==.(m1)), bquote(mu=.(m2))), lty=1:2)
You would not have to throw in the extraneous as.expression calls nor
have to redefine the c function.
Bill Dunlap
TIBCO Software Inc - Spotfire Division
wdunlap tibco.com
> ##
> ## or with subscripts :
> ##
> legend("top", legend =
> c(as.expression( bquote(mu[1] == .(m1)) ),
> as.expression( bquote(mu[2] == .(m2)) )), lty = 1:2)
> ##
> ## or, if you really need to have the subscript as a
> *variable* as well:
> ##
> i1 <- 11; i2 <- 20
> legend("topright", legend =
> c(as.expression( bquote(mu[.(i1)] == .(m1)) ),
> as.expression( bquote(mu[.(i2)] == .(m2)) )), lty = 1:2)
>
>
> Martin Maechler, ETH Zurich
>
>
> KRCT> El mar, 25-08-2009 a las 18:16 -0400, David
> Winsemius escribió:
> >> On Aug 25, 2009, at 5:51 PM, David Winsemius wrote:
> >>
> >> >
> >> > On Aug 25, 2009, at 4:30 PM, Kenneth Roy Cabrera
> Torres wrote:
> >> >
> >> >> Hi R users:
> >> >>
> >> >> I will like to have a legend with math symbols and also with
> >> >> the value of a variable.
> >> >>
> >> >> But I cannot obtain both at the same time (symbol +
> value of a
> >> >> variable):
> >> >>
> >> >> Here is a reproducible example:
> >> >>
> >> >> m1<-5
> >> >> m2<-12
> >> >
> >> > I think I am violating a fortune but this "worked":
> >> >
> >> > plot(1:5,1:5,type="n")
> >> > legend
> >> > ("topleft",legend=c(eval(substitute(
> expression(paste(mu,"=",m1)),
> >> > list(m1=m1) )) , eval(substitute(
> expression(paste(mu,"=",m2)),
> >> > list(m2=m2) ) )), lty=1:2)
> >> >
> >> > And efforts at simplification were at least partly
> successful:
> >> >
> >> > legend("topleft",legend=c(eval(substitute(
> expression(mu == m1),
> >> > list(m1=m1) )) ,
> >> > eval(substitute(
> expression(mu == m2),
> >> > list(m2=m2) ) )),
> >> > lty=1:2)
> >>
> >> And this adds subscripts to the mu's:
> >>
> >> plot(1:5,1:5,type="n");
> >> legend("topleft",
> >> legend=c( eval(substitute( expression(mu[i] == m1),
> >> list(i=1, m1=m1) )) ,
> >> eval(substitute( expression(mu[i] == m2),
> >> list(i=2, m2=m2) )) ),
> >> lty=1:2)
> >>
> >>
> >> >
> >> >
> >> >> plot(1:5,1:5,type="n")
> >> >> legend
> >> >> ("topleft
> >> >> ",legend
> >> >> =
> >> >>
> c(paste(expression(mu),"=",m1),expression(paste(mu,"=",m2))),lty=1:2)
> >> >>
> >> >> Thank you for your help.
> >> >>
> >> >> Kenneth
> >> > --
> >>
> >> David Winsemius, MD
> >> Heritage Laboratories
> >> West Hartford, CT
> >>
>
> KRCT> ______________________________________________
> KRCT> R-help at r-project.org mailing list
> KRCT> https://stat.ethz.ch/mailman/listinfo/r-help
> KRCT> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> KRCT> and provide commented, minimal, self-contained,
> reproducible code.
>
> ______________________________________________
> R-help at 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.
>
More information about the R-help
mailing list