matplotlib выравнивает тики с концом шкалы - PullRequest
0 голосов
/ 31 августа 2018

Если я строю что-то в matplotlib, он выбирает интервал по оси Y (где он ставит галочки). Как я могу сказать, что оси всегда должны заканчиваться полным тиком, а не между двумя тиками?

Если он выбирает ставить галочку каждые 0,5, то конец равен 2,0 и не чуть выше 2,0 без тика.

import matplotlib.pyplot as plt

X = [1,2,3,4,5]
y = [0.1,0.3,2.4,3.9,3.2]

plt.plot(X, y)
plt.show()

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Просто используйте plt.xlim и plt.ylim, если вы хотите ограничить пределы в некотором диапазоне. Вот пример:

import matplotlib.pyplot as plt
import numpy as np

X = [1,2,3,4,5]
# y = [0.1,0.3,2.4,3.9,3.2]
y = [0.1,0.2,0.3,0.5,1.1]

plt.plot(X, y)
plt.xlim(min(X), max(X))
ticks = [tick for tick in ax.get_yticks()]
plt.ylim(ticks[0], ticks[-1])
# plt.ylim(np.floor(min(y)), np.ceil(max(y))) # If you want only integer upper and lower limits

РЕДАКТИРОВАТЬ: Это решает вашу проблему для следующего набора значений X = [1,2,3,4,5] и y = [0.1,0.2,0.3,0.5,1.1]

enter image description here

0 голосов
/ 31 августа 2018

По умолчанию оси автоматически масштабируются до некоторого процента от диапазона данных.

enter image description here

Таким образом, позиции галочек и границы осей абсолютно не коррелированы. Это в основном дает хороший визуальный вид содержимого диаграммы.

Тем не менее, вы можете активировать режим автолимитации округлых чисел,

plt.rcParams['axes.autolimit_mode'] = 'round_numbers'

чтобы ограничения и тики соответствовали:

enter image description here

Здесь вокруг пустых данных создается много пробелов. Вы можете решить установить поля на 0, чтобы избежать этого

plt.rcParams['axes.autolimit_mode'] = 'round_numbers'
plt.rcParams['axes.xmargin'] = 0
plt.rcParams['axes.ymargin'] = 0

enter image description here

Обратите внимание, что этот режим обычно расширяется до следующего «хорошего числа», которое может быть или не быть желательным. Например. если вы позволите первому значению x быть немного меньше 1, X = [0.99,2,3,4,5] пределы будут расширены до 0,5

enter image description here

На странице matplotlib имеется также пример .

0 голосов
/ 31 августа 2018

Более новые версии matplotlib теперь добавляют поля на ваш график по умолчанию. Вы можете удалить их, позвонив по номеру plt.margins(0, 0):

import matplotlib.pyplot as plt

X = [1,2,3,4,5]
y = [0.1,0.3,2.4,3.9,3.2]

plt.plot(X, y)
plt.margins(0, 0)
plt.show()

Это, однако, генерирует ограничения осей автоматически. В приведенном выше примере это не будет 0 или 4 (потому что данные не включают 0 или 4). Поэтому вы можете самостоятельно установить ограничения по осям:

plt.ylim(0, 4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...