Matplotlib堆叠柱状图使用log对数刻度时部分堆叠层无法正常显示问题
问题产生原因
- 核心原因:对数刻度下Matplotlib自动适配的y轴显示范围下限过高。你所有柱形的顶端数值都在70以上,Matplotlib默认会将y轴下限设置为接近最小顶端值的位置(通常为1或更高),而
always_failing_list_tt和always_passing_list_tt的数值都小于1,对应的堆叠层整体位于y轴显示范围之外,因此被裁剪无法显示。线性刻度下y轴默认从0开始,完全覆盖了小数值区间,所以显示正常。 - 次要原因:对数刻度的非线性压缩特性。就算你手动把y轴下限调低到0.1覆盖小数值区间,0~0.556范围的高度在对数尺度下占总高度的比例极低,视觉上会非常窄,很容易被误认为没有正常显示。
- 额外的代码逻辑问题:你当前的堆叠柱形绘制顺序是颠倒的,先绘制了最上层的
keep_list_tt,再绘制下层的两个小数值堆叠层。虽然这个问题不会直接导致堆叠层消失,但后续如果有格式调整、标签设置需求,很容易出现遮挡或计算错误,建议调整为从最底层到最上层的绘制顺序:先画always_failing_list_tt,再画always_passing_list_tt,最后画keep_list_tt。
简易修复方案
在ax1.set_yscale("log")之后手动设置y轴下限覆盖小数值区间即可,示例代码:
ax1.set_ylim(bottom=0.1)
内容的提问来源于stack exchange,提问作者Nandeep Devendra
相关产品推荐
相关产品推荐

