Автоматическая установка границ оси y для гистограммы с использованием matplotlib

Здесь приведен пример построения больших значений.

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), а также, возможно, показать осевой разрыв?

Ответ 1

Немного простая алгебра поможет исправить пределы:

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), чтобы получить указанные вами значения и обеспечить целые числа.

Что касается осевого перерыва, я бы предложил посмотреть на этот пример.