You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:04:52