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

