使用Matplotlib自动设置条形图的y轴限制

23

这是一个绘制大数值图形的示例。

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),并且也许显示一个轴断点?

2个回答

31
一点简单的代数运算可以帮助确定限制条件:
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)以获得您指定的值并确保整数。
至于轴中断,我建议查看此示例

-1

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

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

result1

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());

result2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接