使用ggtext设置ggplot标题出现字距异常,是已知Bug还是用法有误?
ggtext标题字距不规则问题的原因与解决方案
这是showtext与ggtext渲染机制冲突导致的已知问题,并非你误用了库。
问题原因
showtext通过将字体转换为位图进行渲染,而ggtext的element_markdown()基于grid系统处理文本布局,二者在字距计算逻辑上存在适配偏差,最终导致部分位置字距异常。
解决方案
方案一:替换showtext为systemfonts加载字体
systemfonts使用系统原生字体渲染逻辑,与ggtext兼容性更好,示例代码:
library(tidyverse) library(systemfonts) library(ggtext) # 加载Google字体 font_add_google("Public Sans", "Public Sans") p1 <- mtcars %>% ggplot(aes(wt, mpg)) + geom_point() + theme_minimal(base_family = "Public Sans") + labs( title = "Lorem ipsum dolor sit amet, vel vel est donec nulla nam aliquet in in auctor. Sed dolor orci aliquet nunc" ) + theme( plot.title = element_markdown() ) ggsave( plot = p1, filename = "mtcars plot.pdf", width = 11.3, height = 4.5 )
方案二:调整showtext渲染参数(部分场景有效)
通过设置常规屏幕DPI参数,缓解位图渲染带来的字距偏差:
library(tidyverse) library(showtext) library(ggtext) font_add_google("Public Sans") showtext_opts(dpi = 96) # 新增DPI适配设置 p1 <- mtcars %>% ggplot(aes(wt, mpg)) + geom_point() + theme_minimal(base_family = "Public Sans") + labs( title = "Lorem ipsum dolor sit amet, vel vel est donec nulla nam aliquet in in auctor. Sed dolor orci aliquet nunc" ) + theme( plot.title = element_markdown() ) showtext_auto() ggsave( plot = p1, filename = "mtcars plot.pdf", width = 11.3, height = 4.5 )
方案三:放弃markdown格式(无需富文本时)
若标题不需要markdown富文本功能,改用原生文本元素即可避免冲突:
theme( plot.title = element_text(family = "Public Sans") )
内容的提问来源于stack exchange,提问作者tomw
相关产品推荐
相关产品推荐

