如何使用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
相关产品推荐
相关产品推荐

