ggplot2:element_textbox_simple导致文本莫名其妙地换行
我已经使用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
