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

Matplotlib堆叠面积图异常显示为百分比堆叠图问题求助

问题原因

plt.stackplot默认的堆叠逻辑是逐行累加传入的多组数据,你当前输出的堆叠图总高度铺满100%,本质是因为my_percentages数组每一行三个分类的占比之和恰好为100%(同一年份三类燃料占当年总销量的比例和为1),累加后总高度自然就是100%。

解决方案

根据你的实际需求选对应修改方式即可:

  • 仅需要y轴不贴紧100%顶部,留出空白
    直接手动设置y轴上限就行,如果你的百分比数据是0-1的小数形式,改法如下:
plt.figure()
plt.stackplot(unique_years, my_percentages[:, 0], my_percentages[:, 1],my_percentages[:, 2], labels=['Petrol','Diesel', 'Hybrid'])
plt.legend(loc='upper left')
# 按需调整上限数值,比如设置为1.1就会留出10%的顶部空白
plt.ylim(0, 1.1)
plt.show()

如果你的百分比是0-100的整数格式,把plt.ylim的上限改成110即可。

  • 需要堆叠的是各分类独立百分比(非同一整体占比)
    修改my_percentages的计算逻辑,不要计算每类占当年总销量的比例,改为计算每类占自身所有年份销量峰值的比例,此时三类数据每一行的和不再等于100%,堆叠后总高度自然不会铺满100%。

  • 不需要堆叠效果,只要多组面积图分层展示
    不用stackplot,换成fill_between分别绘制每类的面积图即可:

plt.figure()
plt.fill_between(unique_years, 0, my_percentages[:,0], label='Petrol', alpha=0.7)
plt.fill_between(unique_years, 0, my_percentages[:,1], label='Diesel', alpha=0.7)
plt.fill_between(unique_years, 0, my_percentages[:,2], label='Hybrid', alpha=0.7)
plt.legend(loc='upper left')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:15:02