使用bbplot包finalise_plot保存含谷歌字体的绘图时文字过小且宽度无法调整
问题:使用bbplot::finalise_plot保存含谷歌字体的ggplot时文字过小、尺寸异常
在使用bbplot包的finalise_plot函数保存添加了Alice、Playfair谷歌字体的ggplot地图时,出现文字标签过小、宽度无法调整的问题。仅在添加谷歌字体时触发该问题,用ggsave保存也有同样问题,且ggsave画质不如finalise_plot。
相关代码
library(sysfonts) library(showtextdb) library(showtext) library(ggtext) font_add_google(name = "Alice", family = "alice", db_cache = FALSE) # 需要联网 showtext_auto() font_add_google(name = "Playfair", family = "playfair", db_cache = FALSE) # 需要联网 showtext_auto() a <- ggplot(data = recuento) + geom_sf(aes(fill = Leyenda), color = "black") + xlab("Longitud") + ylab("Latitud") + labs(title = "PBI per cápita por país en 2019", subtitle = "Valores medidos en PPA = 2017 international $", fill = " ", caption = "Fuente:Banco Mundial. Elaborado por @cpulica_pe\nGráfico:Diego Jesus | Data: Antony Alvarez") + theme_minimal() + theme_void(base_size = 20) mapa19 <- a + scale_fill_manual(values = color) + theme(legend.position = c(.1, .3), legend.key.size = unit(5, 'cm'), legend.key.width = unit(1, 'cm'), legend.key.height = unit(0.1, 'cm'), legend.text = element_text(size = 18, family = "Losa de Zilla"), plot.title = element_text(family = "alice", face = "bold", size = 40, hjust = 0.50), plot.subtitle = element_text(family = "playfair", size = 18, hjust = 0.50), plot.caption = element_text(family = "playfair", hjust = 0, size = 12)) library(bbplot) # 保存图表 finalise_plot(plot_name = mapa19, source = " ", save_filepath = "C:/Users/HP SUPPORT/Desktop/Gráficos Cosa Pública/mapa19.jpeg", width_pixels = 1000, height_pixels = 500)
解决方案与建议
统一字体渲染的DPI参数
showtext的字体渲染机制和默认系统渲染不同,finalise_plot默认使用300DPI,需在保存前显式设置showtext的DPI与之匹配,避免缩放异常:# 在调用finalise_plot前添加 showtext_opts(dpi = 300)同时建议放大
width_pixels和height_pixels(比如调整为1500x750),因为谷歌字体的像素占比和系统字体存在差异。修正主题中的无效字体配置
代码中legend.text指定的family = "Losa de Zilla"是未加载的无效字体,会触发字体 fallback 导致尺寸混乱,替换为已加载的字体:legend.text = element_text(size = 18, family = "playfair")简化showtext初始化逻辑
代码中重复调用showtext_auto()可能导致渲染冲突,只需在所有字体加载完成后调用一次即可:font_add_google(name = "Alice", family = "alice", db_cache = FALSE) font_add_google(name = "Playfair", family = "playfair", db_cache = FALSE) showtext_auto() # 只调用一次显式指定finalise_plot的DPI
若仍存在尺寸问题,可在finalise_plot中显式声明DPI参数,确保和showtext的设置完全一致:finalise_plot(plot_name = mapa19, source = " ", save_filepath = "C:/Users/HP SUPPORT/Desktop/Gráficos Cosa Pública/mapa19.jpeg", width_pixels = 1500, height_pixels = 750, dpi = 300)验证字体加载状态
用以下代码确认谷歌字体是否成功加载,避免因网络问题导致字体未加载而使用默认字体:sysfonts::font_families() # 输出应包含"alice"和"playfair"
内容的提问来源于stack exchange,提问作者Teco Jesús
相关产品推荐
相关产品推荐

