【问题标题】:Can ggplot titles contain line breaks (when used with ggtext)?ggplot 标题是否可以包含换行符(与 ggtext 一起使用时)?
【发布时间】:2020-02-26 04:35:30
【问题描述】:
library(tidyverse)
library(ggtext)
ggplot(mpg, aes(cty, hwy)) + 
  geom_point() + 
  labs(title = "This is a Title\n") +
  theme(plot.title.position = "plot",
        plot.title = element_markdown(), 
        legend.position = "none")

为什么我不能在我的 ggplot 标题中添加换行符以在标题和面板之间留出一些空白?我知道还有其他方法可以实现此填充,但我想将此问题明确限制为添加空格的换行方法。

我几乎可以肯定我之前已经为轴标题做过此操作,以便在轴标题和绘图面板之间添加空白。为什么\n 在剧情标题中不起作用?


使用基于 cmets 的附加信息进行编辑

此代码块会将标题分成两行。

ggplot(mpg, aes(cty, hwy)) +
  geom_point() +
  labs(title = "Line Number One\nLine Number Two") +
  theme(plot.title.position = "plot",
        legend.position = "none")

这个“几乎相同”的代码块不会。最大的问题... 为什么? 我想在 Markdown 中我需要 <br> 或者两个空格?断线?

ggplot(mpg, aes(cty, hwy)) + 
  geom_point() + 
  labs(title = "The First Line\nThe Second Line") +
  theme(plot.title.position = "plot",
        plot.title = element_markdown(), 
        legend.position = "none")

【问题讨论】:

  • 出于好奇,labs(title = "The First Line \nThe Second Line") 是否与 element_markdown() 一起使用。在 Markdown 中,您通常需要在换行符前留两个空格来换行。
  • @MrFlick 在 R Studio labs(title = "The First Line \nThe Second Line") 中的 \n 之前添加两个空格@ 有效。如果我只是想在没有第二行的情况下添加空白填充,您必须 labs(title = "The First Line \n ") 这也可以。你想把它写成答案,我可以标记为已解决吗?我也会支持@Maurits Evers answer/cmets,因为 Maurits 的回答和 cmets 也很有帮助。

标签: r ggplot2


【解决方案1】:

是的。

选项 1 - 使用 ggtext

使用<br>

library(tidyverse)
library(ggtext)
ggplot(mpg, aes(cty, hwy)) +
  geom_point() +
  labs(title = "This is a Title<br>Another line") +
  theme(plot.title.position = "plot",
        plot.title = element_markdown(),
        legend.position = "none")

ggtext 的好处是您可以使用大量的 markdown/HTML 语法来突出显示/着色/主题文本 ggplot2 标题和标签。

选项 2 - 普通 ggplot2

使用\n

library(tidyverse)
ggplot(mpg, aes(cty, hwy)) +
  geom_point() +
  labs(title = "This is a Title\nAnother line") +
  theme(plot.title.position = "plot",
        legend.position = "none")

【讨论】:

  • @JasonHunter 我可能误解了你。使用element_markdown() 强制换行时需要使用&lt;br&gt;\n 不起作用。
  • @JasonHunter 感谢您的澄清。我不知道element_markdown() 在幕后做了什么(克劳斯威尔克应该能够澄清);但\n not working with element_markdown() 似乎与\n not working in a markdown (or HTML) document 一致。换句话说:您也不会使用\n 在markdown 中强制换行,对吗?
  • [续] 来自ggtext GH site"[element_markdown()] 将提供的文本呈现为 markdown/html。" Markdown 无法识别 \n作为换行符。
  • 所以你也可以用 ggtext 做labs(title = "This is a Title \nAnother line"),对吧? (休息前有这两个空格)
  • 是的。两个空格。但我意识到,如果我在代码中放置两个空格,HTML 只会呈现一个。我需要在评论中输入 nbsp 代码。所以也许这只会让它更加混乱。
【解决方案2】:

您可以使用两个空格,后跟“Return”:

library(ggplot2)
library(ggtext)
ggplot(mpg, aes(cty, hwy)) + 
  geom_point() + 
  labs(title = "This is a Title  
       This is a new line  
       ") +
  theme(plot.title.position = "plot",
        plot.title = element_markdown(), 
        legend.position = "none")

title = "This is a Title \r\nThis is a new line" 也可以。

【讨论】:

    【解决方案3】:

    我采用了最简单的解决方案,在 \n 之前添加两个空格,并且我还需要在换行符之后添加一个不间断空格以获取填充:

    library(tidyverse)
    library(ggtext)
    ggplot(mpg, aes(cty, hwy)) + 
      geom_point() + 
      labs(title = "This is a Title  \n&nbsp;") +
      theme(plot.title.position = "plot",
            plot.title = element_markdown(), 
            legend.position = "none")
    

    【讨论】:

    • 不确定我是否同意两个空格后跟\n 作为“最简单的解决方案”; &lt;br&gt; 是一个包含多个字符的 HTML 标签;所以从代码高尔夫的角度来看,它们的排名是一样的。 (我忽略了你的额外&amp;nbsp,这使它绝对“不简单”)。但这显然取决于您的个人喜好;-)
    • @Maurits Evers 你是对的,也许我对语言的使用有点草率。我可以说这个答案最适合我(相对于“它更简单”)。我曾经在 R Markdown 中使用&lt;br&gt; 为绘图添加空白。有一些极端情况……我几乎记不得了……但我使用的是 blogdown、kableExtra 和其他一些软件包,并且遇到了 &lt;br&gt; 的问题。但能够使用 Markdowns 的“两个空格”成功地断行。从那以后,我在任何类型的 R Markdown 中都避免使用&lt;br&gt;。由于信息有限,我认为这个答案更适合我的用例,但仍有待观察。
    • 不用担心 Jason:-) 很高兴听到 &lt;br&gt; 可能会导致与其他软件包结合使用时出现问题,我会牢记这一点。
    猜你喜欢
    • 2020-07-27
    • 2018-08-07
    • 2017-07-14
    • 2020-11-25
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多