ggplot2:element_textbox_simple导致文本莫名其妙地换行

前端开发 2026-07-11

我已经使用element_textbox_simple将 HTML添加到我的绘图、坐标轴和图例标题,除了图例标题这一点外,其他都正常工作。图例标题在HTML中我并没有添加换行的位置,却出现了换行,我也没法把它去掉。我已经尝试增大文本框的宽度、改变边距和填充,但似乎都不起作用。我的代码和绘图如下:

df2 <- dplyr::select(MassSpecific$data, -Hyp_Type)

MassSpecific$data %>%
  mutate(my_model = predict(MassSpecific.BMR.pgls)) %>%
  ggplot(aes(log(MS.BMR), log(P50_mmHg))) +
  geom_point(data = df2, colour = "grey90") +
  geom_point(aes(colour = Hyp_Type)) +
  scale_colour_discrete(labels=c("Burrowing", "Diving", "High altitude",
                                 "Multiple", "None")) +
  labs(
    title = "<b><span style = 'font-size:12pt'>Mass specific basal metabolic 
    rate<br> and <i>P<sub>50</sub></i> are not correlated </span></b></br><br>
    <span style = 'font-size:10pt'>68 species</br>",
    x = "log Mass Specific BMR (O<sub>2</sub>ml/g/hr)",
    y = "log <i>P<sub>50</sub></i> (mmHg)",
    colour = "Hypoxia type</span>") +
  theme(
    plot.title = element_textbox_simple(margin = margin(0, 0, 5, 0)),
    axis.title.x = element_textbox_simple(halign = 0.5),
    axis.title.y = element_textbox_simple(halign = 0.5,
                                          orientation = "left-rotated"),
    axis.line = element_line(colour = "grey", linewidth = 1),
    panel.background = element_blank(),
    panel.grid.major = element_line(colour = "grey94", linewidth = 0.5),
    panel.grid.minor = element_line(colour = "grey94", linewidth = 0.5),
    axis.ticks = element_line(colour = "grey", linewidth = 1),
    axis.ticks.length = unit(1.5, "mm"),
    legend.title = element_textbox(hjust = 0, width = 0.25),
    text = element_text(family = "Poppins"),
    strip.background.x = element_blank(),
    strip.text.x = element_text(size = 10),
    panel.spacing = unit(0.5, "cm")) +
  geom_segment(aes(x = min(log(MS.BMR)), y = min(my_model), 
                   xend = max(log(MS.BMR)), yend = max(my_model)),
               linewidth = 1, colour = "grey50") + 
  facet_wrap(~Hyp_Type,labeller = as_labeller(
    c(Burrow = "Burrowing",
      Dive = "Diving",
      H_Alt = "High altitude",
      Mult = "Multiple",
      None = "None")))

在此输入图片描述

解决方案

下面是一个最小可复现的示例。由于这里起作用的关键是图例标题中的文本换行,我预计可以用更简单的代码,只保留那一部分。我预计用你的数据和代码也会同样适用。如果不行,请把两段代码和数据都提供出来,以便我们复现问题。

library(ggplot2)
library(ggtext)
ggplot(mtcars, aes(wt, mpg, color = factor(gear))) +
  geom_point() +
  labs(colour = "Hypoxia type") + # same behavior with or without </span>
  theme(legend.title = element_textbox(hjust = 0, width = 0.25))

在这里可以看到,即使指定了很宽的宽度,相当于 width = unit(0.25, "npc"),图例标题仍然被换行: 在此输入图片描述

对我来说,若省略 width 项,或指定另一个有足够空间的单位,如 theme(legend.title = element_textbox())theme(legend.title = element_textbox(hjust = 0, width = unit(0.9, "inch"))),看起来都接近这个效果,问题就解决了: 在此输入图片描述

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章