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

