这是一个绘制大数值图形的示例。
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),并且也许显示一个轴断点?
这是一个绘制大数值图形的示例。
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),并且也许显示一个轴断点?
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轴进行对数缩放。
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());