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

R语言waffle包调用FontAwesome绘制华夫图报错求助

问题解决方法

方案1:修复waffle包的FontAwesome识别问题

你遇到的报错核心是两个原因:一是旧版本waffle对FontAwesome字体的加载逻辑有兼容问题,二是extrafont包长期未更新,既不支持otf格式字体,对Mac新系统的字体目录扫描也存在bug,全量导入提示0字体就是这个问题导致的,直接弃用extrafont即可,按以下步骤操作:

  • 先确认本地FontAwesome字体安装路径:Mac用户级字体默认存放在~/Library/Fonts/目录,系统级字体存放在/Library/Fonts/目录,找到文件名包含Font Awesome 6 Free的字体文件,其中人形图标child属于Solid字重的图标,需要用到Solid版本的字体文件。
  • 运行以下代码加载字体并绘图:
# 安装依赖包
install.packages(c("waffle", "showtext", "ggplot2"))
library(waffle)
library(showtext)

# 加载本地FontAwesome字体,路径替换为你本地的实际文件路径
font_add(
  family = "FontAwesome",
  regular = "~/Library/Fonts/Font Awesome 6 Free-Regular-400.otf",
  bold = "~/Library/Fonts/Font Awesome 6 Free-Solid-900.otf"
)
# 开启字体自动渲染
showtext_auto()

# 运行绘图代码
waffle(
  c(50, 30, 15, 5), 
  rows = 5, 
  use_glyph = "child", 
  glyph_size = 6, 
  title = "Look I made an infographic using R!",
  legend_pos = "bottom"
)

方案2:waffle包替代实现方案

如果上述方案仍无法正常运行,可以直接用ggplot2原生绘制华夫图,不需要额外依赖图标字体,支持自定义图标样式:

  • 基础方块华夫图实现代码:
library(ggplot2)
# 构造绘图数据
waffle_data <- data.frame(
  category = rep(c("类别1", "类别2", "类别3", "类别4"), c(50, 30, 15, 5)),
  x_pos = rep(1:20, each = 5)[1:100],
  y_pos = rep(1:5, 20)[1:100]
)

ggplot(waffle_data, aes(x = x_pos, y = y_pos, fill = category)) +
  geom_tile(color = "white", linewidth = 1) +
  coord_equal() +
  theme_void() +
  labs(title = "华夫图示例", fill = NULL) +
  theme(plot.title = element_text(hjust = 0.5, size = 14))
  • 人形图标华夫图实现(无需安装FontAwesome,直接用系统emoji):
install.packages("ggtext")
library(ggtext)

ggplot(waffle_data, aes(x = x_pos, y = y_pos, color = category)) +
  geom_richtext(aes(label = "🧒"), fill = NA, label.color = NA, size = 8) +
  coord_equal() +
  theme_void() +
  labs(title = "人形图标华夫图示例", color = NULL) +
  theme(plot.title = element_text(hjust = 0.5, size = 14))

内容的提问来源于stack exchange,提问作者user19250276

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:24:15