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

使用waffle包绘制的图表缺失一组,如何显示全部七组?

解决waffle图最后一组不显示的问题

你的问题其实涉及两个层面:一是极小占比的组在图例中被自动省略,二是该组的数值太小导致图中没有对应的方块。下面给你详细的解决思路和优化代码:

问题根源

最后一组「Storage systems」的数值仅为0.07,占比不到0.05%:

  • waffle()默认会将这类极小的非整数数值取整为0,导致图中没有对应的方块;
  • 图例渲染逻辑会自动省略占比极低的类别,导致组名无法显示。

解决方案

1. 强制保留所有图例标签

你发现的添加labels参数的方法非常有效,它能强制让图例显示全部7个组的名称,不受占比影响:

counts<-c(135.92, 15.98, 14.97, 14.15, 5.82, 11.82, 0.07 )
counts_names<-sprintf("%s (%s)", c("Coal", "Gas", "Wind", "Hydro", "Grid-scalar solar", "Rooftop solar", "Storage systems"), scales::percent(round(counts/sum(counts), 4)))
names(counts)<-counts_names

# 调整后的代码:通过labels参数强制指定所有图例标签
Generation_graph<-waffle(counts)+ 
  scale_fill_tableau(name=NULL, labels=counts_names)

2. 让极小占比的组在图中显示方块

因为原始数值太小,waffle()会自动取整为0,导致图中看不到该组的方块。你可以通过缩放数值+设置总方块数的方式,确保小占比组至少能显示1个方块:

# 按占比缩放数值,设置总方块数为2000(可根据需求调整)
counts_scaled <- round(counts / sum(counts) * 2000)
# 兜底:确保最后一组至少有1个方块
counts_scaled[7] <- max(counts_scaled[7], 1)
names(counts_scaled) <- counts_names

# 生成完整显示所有组的waffle图
Generation_graph<-waffle(counts_scaled, total=2000)+ 
  scale_fill_tableau(name=NULL, labels=counts_names)

补充说明

  • waffle()的values参数默认会把输入数值直接当作方块数,所以非整数会被自动取整,这也是极小数值消失的核心原因;
  • 总方块数设置得越大,小占比组越容易显示,但也要注意避免图表过于庞大影响可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:37:44