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

如何使用R包通过图标实现数量及占比可视化

适配需求的R包解决方案

你需要的这类可视化叫做「象形瓦块图/图标计数图」,以下两个方案均可完美实现需求:

方案1:使用waffle包(最简便)

waffle包原生支持图标排列类可视化,内置支持fontawesome图标,不需要手动循环绘制,可直接指定行数、图标样式、分组数值:

  • 核心参数:rows参数控制排布行数,use_glyph参数指定fontawesome图标类型,glyph_size调整图标大小
  • 示例代码适配你的21女4男场景:
# 加载包
library(waffle)
library(extrafont)

# 构造数据
gender_count <- c(女性=21, 男性=4)
# 绘制,指定分5行展示
waffle(gender_count, 
       rows = 5,
       use_glyph = c("female", "male"),
       glyph_size = 12,
       colors = c("#ff6b6b", "#4ecdc4"))

方案2:emojifont + ggplot2组合(自由度最高)

如果需要自定义排布规则、图标样式,可以用这个组合,完全不存在循环绘制的限制,你可以自由控制每个图标的位置、对齐方式:

  • 核心逻辑:先生成每个图标的坐标矩阵,再用geom_text加载emoji或fontawesome图标批量绘制
  • 示例代码:
library(ggplot2)
library(emojifont)

# 生成21个女性、4个男性的坐标,按5行排列
n_row <- 5
female_df <- data.frame(
  x = rep(1:ceiling(21/n_row), each = n_row)[1:21],
  y = rep(1:n_row, ceiling(21/n_row))[1:21],
  icon = fontawesome("fa-female")
)
male_df <- data.frame(
  x = rep(max(female_df$x) + 1:ceiling(4/n_row), each = n_row)[1:4],
  y = rep(1:n_row, ceiling(4/n_row))[1:4],
  icon = fontawesome("fa-male")
)
plot_df <- rbind(female_df, male_df)

# 绘制
ggplot(plot_df, aes(x=x, y=y, label=icon)) +
  geom_text(size=12, color = c(rep("#ff6b6b",21), rep("#4ecdc4",4))) +
  theme_void()

两种方案都支持单行/多行排布、图标大小调整、颜色自定义,完全可以实现你需要的可视化效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:24:04