利用Matplotlib自动设置条形图的y轴界限

6g8kf2rb  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(89)

下面是一个绘制大值的示例。

import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [1000, 1002, 1001, 1003, 1005]
plt.bar(x,y) 
plt.show()

y轴从0开始,所以所有的条看起来都相等。我知道你可以使用plt.ylim手动设置限制,但是有没有一种方法可以让matplotlib自动(并且巧妙地)将限制设置为合理的值(比如998-1008),并且还可以显示一个轴中断?

ibrsph3r

ibrsph3r1#

一点简单的代数将有助于确定限制:

import matplotlib.pyplot as plt
import math
x = [1,2,3,4,5]
y = [1000, 1002, 1001, 1003, 1005]
low = min(y)
high = max(y)
plt.ylim([math.ceil(low-0.5*(high-low)), math.ceil(high+0.5*(high-low))])
plt.bar(x,y) 
plt.show()

通过这种方式,您可以找到y值之间的差异,并使用它们来设置沿着y轴的比例。我使用math.ceil(与math.floor相对)来获取您指定的值并确保为整数。
至于轴中断,我建议查看this example

6ss1mwsb

6ss1mwsb2#

“放大”条形图顶端的一种非常简单的方法是对y轴进行对数标度。

plt.bar(x, y, log=True)

yticklabels得到了一个科学计数法,但是通过格式化主刻度和次刻度返回到普通格式相对简单。

import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

x = [1,2,3,4,5]
y = [1000, 1002, 1001, 1003, 1005]

# log scale
plt.bar(x, y, log=True)
# remove scientific notation
plt.gca().yaxis.set(major_formatter=ScalarFormatter(), minor_formatter=ScalarFormatter());

相关问题