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

如何让matplotlib柱状图低于1时反转,且y轴刻度保持均匀间距?

Matplotlib柱状图自定义反转规则及Y轴刻度设置方案

我需要实现两个绘图需求:

  • 柱状图的柱子在数值低于1时就向下反转,而非默认仅数值为负时才反转
  • Y轴刻度/步长之间保持均匀间距

初始代码

import matplotlib.pyplot as plt
import numpy as np

labels = ['A','B','C']

Vals1 = [28.3232, 12.232, 9.6132]
Vals2 = [0.00456, 17.868, 13.453]
Vals3 = [0.0032, 1.234, 0.08214]

x = np.arange(len(labels)) 
width = 0.2 
fig, ax = plt.subplots()
rects1 = ax.bar(x - width, Vals1, width, label='V1')
rects2 = ax.bar(x, Vals2, width, label='V2')
rects3 = ax.bar(x + width, Vals3, width, label='V3')

ax.set_xticks(x)
ax.set_xticklabels(labels) 
plt.xticks(rotation=90)
ax.legend()
yScale = [0.0019531,0.0039063,0.0078125,0.015625,0.03125,0.0625,0.125,0.25,0.5,1,2,4,8,16,32]
ax.set_yticks(yScale)
plt.show()

解决方案

通过调整柱子基准位置和数值映射即可实现需求,原理是把柱子的基准线从默认的0改为1,再通过数值映射让小于1的数值对应负的柱子高度、大于1的数值对应正的柱子高度,这样小于1的柱子就会从1的位置向下延伸:

  1. 实例化ax.bar时添加bottom=1参数,调整柱子的基准位置
  2. 对所有要绘制的数值数组做翻转处理,处理逻辑示例如下:
# 所有数值数组都可参照该逻辑处理
for i in range(len(Vals1)):
    Vals1[i] = (1 - Vals1[i]) * -1

处理完成后再执行绘图代码,即可实现数值低于1时柱子向下反转的效果,同时Y轴可保留原来设置的均匀刻度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:09:00