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
相关产品推荐
相关产品推荐

