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

ggplot2华夫图:百分比小数展示及横向排列实现求助

解决华夫图小数占比与横向排列问题

1. 实现小数占比展示

waffle包以方块数量映射数值,默认每个方块对应1单位。要展示小数百分比,需按比例放大所有数值,将小数转化为整数的方块数量,同时修改单位说明。例如你需要展示的87.5%和12.5%,可将数值乘以2,得到175和25(总计200),此时每个方块代表0.5%,完美匹配原小数比例。

2. 横向排列华夫图

替换iron()为patchwork包的wrap_plots()函数,通过nrow=1参数实现横向排列,后续要添加多行图时,只需将多组横向排列的图再纵向组合即可。

修改后的完整代码

# 加载所需包
library(waffle)
library(patchwork)

# 整数比例的华夫图
prop1avs <- c('nb'= 90, 'b'= 10)
w1 <- waffle(prop1avs, rows=10, size=0.6, 
             colors=c("#E48B8B", "#3A9ABD"), 
             title="Small", 
             xlab="1 square = 1/100")

prop1avm <- c('nb'= 75, 'b'= 25)
w2 <- waffle(prop1avm, rows=10, size=0.6, 
             colors=c("#E48B8B", "#3A9ABD"), 
             title="Medium",
             xlab="1 square = 1/100")

# 处理小数比例:放大2倍转为整数,对应0.5%每方块
prop1avl <- c('nb'= 87.5*2, 'b'= 12.5*2)
w3 <- waffle(prop1avl, rows=10, size=0.6, 
             colors=c("#E48B8B", "#3A9ABD"), 
             title="Large",
             xlab="1 square = 0.5/100") 

# 横向排列三个图
wrap_plots(w1, w2, w3, nrow = 1)

# 后续添加多行示例:比如再做一组横向图,然后纵向组合
# w4 <- ... # 新的华夫图
# w5 <- ...
# w6 <- ...
# row1 <- wrap_plots(w1,w2,w3, nrow=1)
# row2 <- wrap_plots(w4,w5,w6, nrow=1)
# wrap_plots(row1, row2, ncol=1)

关键说明

  • 小数处理:放大倍数可根据小数精度调整,比如要展示0.1%的精度,就把数值乘以10,总方块数变为1000,xlab对应改为1 square = 0.1/100。
  • 横向排列:patchwork包比iron()更灵活,支持自由组合多图布局,满足后续添加多行的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:30:53