установка предела оси Y в Matplotlib

419

Мне нужна помощь с настройкой пределов оси Y на matplotlib. Вот код, который я попытался, безуспешно.

import matplotlib.pyplot as plt

plt.figure(1, figsize = (8.5,11))
plt.suptitle('plot title')
ax = []
aPlot = plt.subplot(321, axisbg = 'w', title = "Year 1")
ax.append(aPlot)
plt.plot(paramValues,plotDataPrice[0], color = '#340B8C', 
     marker = 'o', ms = 5, mfc = '#EB1717')
plt.xticks(paramValues)
plt.ylabel('Average Price')
plt.xlabel('Mark-up')
plt.grid(True)
plt.ylim((25,250))

С данными, которые у меня есть для этого графика, я получаю пределы оси Y 20 и 200. Однако я хочу, чтобы пределы 20 и 250.

Curious2learn
источник
1
У меня работает с Matplotlib 1.0.0, если я добавлю plt.show()в конце, чтобы показать сюжет. Какую версию и какой бэкэнд вы используете?
Тамас
14
Работа для меня с Matplotlib 0.98.5.2, Python 2.6.2. Я пробовал и то plt.ylim((25,250))и другое plt.ylim(ymax = 250, ymin = 25). Я использую Aggбэкэнд.
Манодж Говиндан
1
Спасибо вам обоим. Работает ли это с PDF для вас.
Curious2learn
1
примечание: axisbgтеперь устарело
SherylHohman

Ответы:

617

Попробуй это . Работает и для участков.

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])
Хима
источник
201
Кстати, это глупо аббревиатура означает « г эт с омер текущего РЭС».
Ленар Хойт
33
Вы также можете установить одно значение, Noneкоторое оставляет вычисление для matplotlib, напримерaxes.set_ylim([ymin,None])
linqu
129

Ваш код работает и для меня. Однако другой обходной путь может заключаться в том, чтобы получить ось графика и затем изменить только значения y:

x1,x2,y1,y2 = plt.axis()
plt.axis((x1,x2,25,250))

thetarro
источник
1
Вы можете просто установить x1 и x2 None.
Хильке Валинга
78

Одна вещь, которую вы можете сделать, это установить диапазон осей самостоятельно, используя matplotlib.pyplot.axis.

matplotlib.pyplot.axis

from matplotlib import pyplot as plt
plt.axis([0, 10, 0, 20])

0,10 для диапазона оси х. 0,20 для диапазона оси Y.

или вы также можете использовать matplotlib.pyplot.xlim или matplotlib.pyplot.ylim

matplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)
Бират Бозе
источник
24

Вы можете создать экземпляр объекта matplotlib.pyplot.axesи вызвать set_ylim()его. Это было бы что-то вроде этого:

import matplotlib.pyplot as plt
axes = plt.axes()
axes.set_ylim([0, 1])
Реза Кешаварз
источник
16

Это сработало, по крайней мере, в версии 2.2.2:

plt.axis([None, None, 0, 100])

Вероятно, это хороший способ настроить, например, только xmin, ymax и т. Д.

Антти А
источник
14

Чтобы добавить к ответу @ Hima, если вы хотите изменить текущий предел x или y, вы можете использовать следующее.

import numpy as np # you probably alredy do this so no extra overhead
fig, axes = plt.subplot()
axes.plot(data[:,0], data[:,1])
xlim = axes.get_xlim()
# example of how to zoomout by a factor of 0.1
factor = 0.1 
new_xlim = (xlim[0] + xlim[1])/2 + np.array((-0.5, 0.5)) * (xlim[1] - xlim[0]) * (1 + factor) 
axes.set_xlim(new_xlim)

Я нахожу это особенно полезным, когда хочу уменьшить или немного увеличить масштаб по умолчанию.

Стивен Хоуэлл
источник
7

Это должно работать. Ваш код работает для меня, как для Тамаса и Маноя Говиндана. Похоже, вы можете попытаться обновить Matplotlib. Если вы не можете обновить Matplotlib (например, если у вас недостаточно прав администратора), возможно, может matplotlib.use()помочь использование другого бэкэнда с .

Эрик О Лебиго
источник
Спасибо за проверку! Я использую PDF-бэкэнд ( matplotlib.use('PDF')). Я использую версию, которая поставляется с последней версией Enthought Python Distribution. Можете ли вы посмотреть, работает ли он с бэкендом PDF. Спасибо!
Curious2learn
Он работает с бэкендом PDF в Mac OS X. Вы уверены, что выходной файл действительно обновлен plt.savefig()?
Эрик О Лебиго
Я понял проблему, я думаю. Если я вывезу aPlot =в plt.subplotочереди, это тоже работает для меня. Похоже, что если кто-то назначит подобласть для такой переменной, то должен использоваться какой-то другой способ установки пределов осей. Это правда?
Curious2learn
1
Насколько я знаю, plt.ylim()применяются ограничения по текущим осям, которые устанавливаются при этом plt.subplot(). Я также не могу поверить, что меня plt.subplot()заботит то, как используются возвращаемые оси (положить в переменную или нет и т. Д.). Так что я бы сказал, что это должно сработать; это работает на моей машине.
Эрик О Лебиго
6

Просто для тонкой настройки. Если вы хотите установить только одну из границ оси и оставить другую границу неизменной, вы можете выбрать один или несколько из следующих операторов

plt.xlim(right=xmax) #xmax is your value
plt.xlim(left=xmin) #xmin is your value
plt.ylim(top=ymax) #ymax is your value
plt.ylim(bottom=ymin) #ymin is your value

Взгляните на документацию для xlim и для ylim

loved.by.Jesus
источник
0

Если оси (генерируемые кодом под кодом, показанным в вопросе) делят диапазон с первыми осями, убедитесь, что вы задали диапазон после последнего графика этих осей.

Rainald62
источник