

## 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/ggplot2twolinelabelwithexpressionlibrary(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]]
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


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/addinganewlineinasubstituteexpressionI 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 Rhelp <
[hidden email]> 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/ggplot2twolinelabelwithexpression>
> 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]]
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide
> http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>
[[alternative HTML version deleted]]
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


See also this:
https://cran.rproject.org/web/packages/latex2exp/vignettes/usinglatex2exp.htmlBert
On Thu, Feb 18, 2021 at 10:42 AM Bert Gunter < [hidden email]> 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/addinganewlineinasubstituteexpression>
> 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 Rhelp <
> [hidden email]> 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/ggplot2twolinelabelwithexpression>>
>> 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]]
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide
>> http://www.Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>>
>
[[alternative HTML version deleted]]
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


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 < [hidden email]>
Sent: Thursday, February 18, 2021 1:47 PM
To: Izmirlian, Grant (NIH/NCI) [E] < [hidden email]>
Cc: [hidden email]
Subject: Re: [R] New line in caption with math symbols embedded in expression (paste(
See also this:
https://cran.rproject.org/web/packages/latex2exp/vignettes/usinglatex2exp.htmlBert
On Thu, Feb 18, 2021 at 10:42 AM Bert Gunter < [hidden email]<mailto: [hidden email]>> 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/addinganewlineinasubstituteexpressionI 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 Rhelp < [hidden email]<mailto: [hidden email]>> 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/ggplot2twolinelabelwithexpressionlibrary(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]]
______________________________________________
[hidden email]<mailto: [hidden email]> mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.
[[alternative HTML version deleted]]
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


To be clear: I have tried none of this, and so cannot offer detailed useful
advice. Just passing along what I found (though I have done it with "atop"
in the dim, dark past). Let us know what works best for you if you find
something that does.
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 10:51 AM Izmirlian, Grant (NIH/NCI) [E] <
[hidden email]> wrote:
> 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 < [hidden email]>
> *Sent:* Thursday, February 18, 2021 1:47 PM
> *To:* Izmirlian, Grant (NIH/NCI) [E] < [hidden email]>
> *Cc:* [hidden email]
> *Subject:* Re: [R] New line in caption with math symbols embedded in
> expression (paste(
>
>
>
> See also this:
>
>
>
>
> https://cran.rproject.org/web/packages/latex2exp/vignettes/usinglatex2exp.html>
>
>
>
>
> Bert
>
>
>
>
>
> On Thu, Feb 18, 2021 at 10:42 AM Bert Gunter < [hidden email]>
> 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/addinganewlineinasubstituteexpression>
>
>
> 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 Rhelp <
> [hidden email]> 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/ggplot2twolinelabelwithexpression>
> 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]]
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide
> http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>
>
[[alternative HTML version deleted]]
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


In reply to this post by R help mailing list2
Hello,
First of all the plotmath in your code doesn't need paste, expression
alone will do it.
I am not sure that the following is what you want. I create the caption
beforehand, in order to make the plotting code simpler.
The asterisks/tildes make less/more space between the text line's elements.
e < expression(
atop(
P * "(" * FDP ~ ">" ~ alpha * ") " ~
"for 'FDR' and 'Auto' FDP control method, vs '" *
m * "' at levels of 'eff size' (col) and '" *
p[1] * "' (row)" ~ "and",
"a new line" ~
bar(x) == sum(frac(x[i], n), i==1, n)
)
)
p < ggplot(data=DAT, aes(x=X)) + geom_point(aes(y=Y)) +
geom_line(aes(y=Y.p))
p < p + labs(caption = e)
p < p + theme(plot.caption = element_text(hjust = 0))
p
Hope this helps,
Rui Barradas
Às 17:37 de 18/02/21, Izmirlian, Grant (NIH/NCI) [E] via Rhelp escreveu:
> ## 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/ggplot2twolinelabelwithexpression>
> 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]]
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


This is beautiful. Thanks!
G
Original Message
From: Rui Barradas < [hidden email]>
Sent: Thursday, February 18, 2021 2:10 PM
To: Izmirlian, Grant (NIH/NCI) [E] < [hidden email]>; [hidden email]
Subject: Re: [R] New line in caption with math symbols embedded in expression (paste(
Hello,
First of all the plotmath in your code doesn't need paste, expression alone will do it.
I am not sure that the following is what you want. I create the caption beforehand, in order to make the plotting code simpler.
The asterisks/tildes make less/more space between the text line's elements.
e < expression(
atop(
P * "(" * FDP ~ ">" ~ alpha * ") " ~
"for 'FDR' and 'Auto' FDP control method, vs '" *
m * "' at levels of 'eff size' (col) and '" *
p[1] * "' (row)" ~ "and",
"a new line" ~
bar(x) == sum(frac(x[i], n), i==1, n)
)
)
p < ggplot(data=DAT, aes(x=X)) + geom_point(aes(y=Y)) +
geom_line(aes(y=Y.p))
p < p + labs(caption = e)
p < p + theme(plot.caption = element_text(hjust = 0))
p
Hope this helps,
Rui Barradas
Às 17:37 de 18/02/21, Izmirlian, Grant (NIH/NCI) [E] via Rhelp escreveu:
> ## 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/ggplot2twolinelabelwithexpression>
> 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]]
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


In reply to this post by R help mailing list2
You th' barradas!!!
Original Message
From: Rui Barradas < [hidden email]>
Sent: Thursday, February 18, 2021 2:10 PM
To: Izmirlian, Grant (NIH/NCI) [E] < [hidden email]>; [hidden email]
Subject: Re: [R] New line in caption with math symbols embedded in expression (paste(
Hello,
First of all the plotmath in your code doesn't need paste, expression alone will do it.
I am not sure that the following is what you want. I create the caption beforehand, in order to make the plotting code simpler.
The asterisks/tildes make less/more space between the text line's elements.
e < expression(
atop(
P * "(" * FDP ~ ">" ~ alpha * ") " ~
"for 'FDR' and 'Auto' FDP control method, vs '" *
m * "' at levels of 'eff size' (col) and '" *
p[1] * "' (row)" ~ "and",
"a new line" ~
bar(x) == sum(frac(x[i], n), i==1, n)
)
)
p < ggplot(data=DAT, aes(x=X)) + geom_point(aes(y=Y)) +
geom_line(aes(y=Y.p))
p < p + labs(caption = e)
p < p + theme(plot.caption = element_text(hjust = 0))
p
Hope this helps,
Rui Barradas
Às 17:37 de 18/02/21, Izmirlian, Grant (NIH/NCI) [E] via Rhelp escreveu:
> ## 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/ggplot2twolinelabelwithexpression>
> 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]]
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.

