Bert Gunter
2021-Feb-18 18:46 UTC
[R] New line in caption with math symbols embedded in expression (paste(
See also this: https://cran.r-project.org/web/packages/latex2exp/vignettes/using-latex2exp.html Bert On Thu, Feb 18, 2021 at 10:42 AM Bert Gunter <bgunter.4567 at gmail.com> wrote:> Note, from ?plotmath: > > "Control characters (e.g., \n) are not interpreted in character strings in > plotmath, unlike normal plotting." > > For this reason, as best I can tell, you need to fool with plotmath's > "atop" command or do separate "labs" calls. This post seems to confirm > that opinion: > > > https://stackoverflow.com/questions/29112697/adding-a-newline-in-a-substitute-expression > > I certainly would welcome a better alternative. > > Cheers, > Bert Gunter > > "The trouble with having an open mind is that people keep coming along and > sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > > On Thu, Feb 18, 2021 at 9:37 AM Izmirlian, Grant (NIH/NCI) [E] via R-help < > r-help at r-project.org> wrote: > >> ## I am using ggplot and trying to produce a caption containing math >> symbols. I need to >> ## add a second line. I did a fair amount of googling for answers. This >> one seemed like >> ## it would answer my question as it is nearly exactly my problem, except >> there is only >> ## one argument to the paste function. Note that my example is a complete >> minimal >> ## example, just a scatterplot with a line, and the caption content seems >> to not have >> ## anything to do with the plot. That is of course, intentional. >> ## >> ## >> https://stackoverflow.com/questions/13223846/ggplot2-two-line-label-with-expression >> >> library(ggplot2) >> X <- 10*runif(100) >> Y <- 2*X + rnorm(100, sd=2) >> fit <- lm(Y~X) >> Y.p <- predict(fit, newdata=data.frame(X=X)) >> DAT <- data.frame(X=X) >> >> ## without a newline >> p <- ggplot(data=DAT, aes(x=X)) + geom_point(aes(y=Y)) + >> geom_line(aes(y=Y.p)) >> p <- p + labs(caption=expression(paste(P,"(",FDP,">", alpha,") ", >> "for 'FDR' and 'Auto' FDP control method, vs '", >> m, >> "' at levels of 'eff size' (col) and '", p[1], "' >> (row)"))) >> p <- p + theme(plot.caption = element_text(hjust = 0)) >> >> ## newline, method 1, just add a new component of paste containing "\n" >> somewhere in the middle >> p <- ggplot(data=DAT, aes(x=X)) + geom_point(aes(y=Y)) + >> geom_line(aes(y=Y.p)) >> p <- p + labs(caption=expression(paste(P,"(",FDP,">", alpha,") ", >> "for 'FDR' and 'Auto' FDP control method, vs '", >> m, >> "' at levels of 'eff size' (col) and '", p[1], "' >> (row)", >> "and \n a new line"))) >> p <- p + theme(plot.caption = element_text(hjust = 0)) >> >> ## doesn't work because the newline affects only the last component of >> paste. It looks like new line >> ## works if the line is long enough, but the newline character is being >> parsed until the individual >> ## arguments to paste are parsed for math symbols but prior to pasting >> the components together. prior >> ## to pasting all arguments. I can't imagine why this would be the >> desired behavior. When the value of a >> ## caption argument is expression(paste(s1, s2, s3, ...)) then parsing >> for a newline character should >> ## occur after the components are pasted together, right? >> >> ## newline, method 2, enclose paste in another paste and add the new line >> as the second argument of the >> ## outer paste >> p <- ggplot(data=DAT, aes(x=X)) + geom_point(aes(y=Y)) + >> geom_line(aes(y=Y.p)) >> p <- p + labs(caption=expression(paste(paste(P,"(",FDP,">", alpha,") ", >> "for 'FDR' and 'Auto' FDP control method, vs '", >> m, >> "' at levels of 'eff size' (col) and '", p[1], "' >> (row)"), >> "and \n a new line"))) >> p <- p + theme(plot.caption = element_text(hjust = 0)) >> >> ## which has the same behavior >> >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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]]
Izmirlian, Grant (NIH/NCI) [E]
2021-Feb-18 18:50 UTC
[R] New line in caption with math symbols embedded in expression (paste(
Thank you for your suggestions. So you?re suggesting I bypass the ggplot symbol
parsing by passing a character string to caption which has latex2exp in it. Good
idea. So in this approach, I should break the string into new lines via ?atop??
Thanks
From: Bert Gunter <bgunter.4567 at gmail.com>
Sent: Thursday, February 18, 2021 1:47 PM
To: Izmirlian, Grant (NIH/NCI) [E] <izmirlig at mail.nih.gov>
Cc: r-help at r-project.org
Subject: Re: [R] New line in caption with math symbols embedded in expression
(paste(
See also this:
https://cran.r-project.org/web/packages/latex2exp/vignettes/using-latex2exp.html
Bert
On Thu, Feb 18, 2021 at 10:42 AM Bert Gunter <bgunter.4567 at
gmail.com<mailto:bgunter.4567 at gmail.com>> wrote:
Note, from ?plotmath:
"Control characters (e.g., \n) are not interpreted in character strings in
plotmath, unlike normal plotting."
For this reason, as best I can tell, you need to fool with plotmath's
"atop" command or do separate "labs" calls. This post seems
to confirm that opinion:
https://stackoverflow.com/questions/29112697/adding-a-newline-in-a-substitute-expression
I certainly would welcome a better alternative.
Cheers,
Bert Gunter
"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Thu, Feb 18, 2021 at 9:37 AM Izmirlian, Grant (NIH/NCI) [E] via R-help
<r-help at r-project.org<mailto:r-help at r-project.org>> wrote:
## I am using ggplot and trying to produce a caption containing math symbols. I
need to
## add a second line. I did a fair amount of googling for answers. This one
seemed like
## it would answer my question as it is nearly exactly my problem, except there
is only
## one argument to the paste function. Note that my example is a complete
minimal
## example, just a scatterplot with a line, and the caption content seems to not
have
## anything to do with the plot. That is of course, intentional.
##
##
https://stackoverflow.com/questions/13223846/ggplot2-two-line-label-with-expression
library(ggplot2)
X <- 10*runif(100)
Y <- 2*X + rnorm(100, sd=2)
fit <- lm(Y~X)
Y.p <- predict(fit, newdata=data.frame(X=X))
DAT <- data.frame(X=X)
## without a newline
p <- ggplot(data=DAT, aes(x=X)) + geom_point(aes(y=Y)) +
geom_line(aes(y=Y.p))
p <- p + labs(caption=expression(paste(P,"(",FDP,">",
alpha,") ",
"for 'FDR' and 'Auto' FDP control
method, vs '", m,
"' at levels of 'eff size' (col) and
'", p[1], "' (row)")))
p <- p + theme(plot.caption = element_text(hjust = 0))
## newline, method 1, just add a new component of paste containing
"\n" somewhere in the middle
p <- ggplot(data=DAT, aes(x=X)) + geom_point(aes(y=Y)) +
geom_line(aes(y=Y.p))
p <- p + labs(caption=expression(paste(P,"(",FDP,">",
alpha,") ",
"for 'FDR' and 'Auto' FDP control
method, vs '", m,
"' at levels of 'eff size' (col) and
'", p[1], "' (row)",
"and \n a new line")))
p <- p + theme(plot.caption = element_text(hjust = 0))
## doesn't work because the newline affects only the last component of
paste. It looks like new line
## works if the line is long enough, but the newline character is being parsed
until the individual
## arguments to paste are parsed for math symbols but prior to pasting the
components together. prior
## to pasting all arguments. I can't imagine why this would be the desired
behavior. When the value of a
## caption argument is expression(paste(s1, s2, s3, ...)) then parsing for a
newline character should
## occur after the components are pasted together, right?
## newline, method 2, enclose paste in another paste and add the new line as the
second argument of the
## outer paste
p <- ggplot(data=DAT, aes(x=X)) + geom_point(aes(y=Y)) +
geom_line(aes(y=Y.p))
p <- p +
labs(caption=expression(paste(paste(P,"(",FDP,">",
alpha,") ",
"for 'FDR' and 'Auto' FDP control
method, vs '", m,
"' at levels of 'eff size' (col) and
'", p[1], "' (row)"),
"and \n a new line")))
p <- p + theme(plot.caption = element_text(hjust = 0))
## which has the same behavior
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- To
UNSUBSCRIBE and more, see
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]]