Установка предела оси Y в Matplotlib
Мне нужна помощь с установкой пределов оси 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.
10 ответов
Попробуй это. Работает и для участков.
axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])
Одна вещь, которую вы можете сделать, это установить диапазон осей самостоятельно, используя 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)
Ваш код работает и для меня. Однако другой обходной путь может заключаться в том, чтобы получить ось графика и затем изменить только значения y:
x1,x2,y1,y2 = plt.axis()
plt.axis((x1,x2,25,250))
Вы можете создать экземпляр объекта из matplotlib.pyplot.axes
и позвонить set_ylim()
в теме. Это было бы что-то вроде этого:
import matplotlib.pyplot as plt
axes = plt.axes()
axes.set_ylim([0, 1])
Просто для тонкой настройки. Если вы хотите установить только одну из границ оси и оставить другую границу неизменной, вы можете выбрать одно или несколько из следующих утверждений
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
Это сработало по крайней мере в версии 2.2.2 для matplotlib:
plt.axis([None, None, 0, 100])
Вероятно, это хороший способ настроить, например, только xmin, ymax и т. Д.
Чтобы добавить к ответу @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)
Я нахожу это особенно полезным, когда я хочу уменьшить или немного увеличить масштаб по умолчанию.
Это должно работать. Ваш код работает для меня, как и для Тамаса и Маноя Говиндана. Похоже, вы могли бы попытаться обновить Matplotlib. Если вы не можете обновить Matplotlib (например, если у вас недостаточно прав администратора), возможно, используйте другой бэкэнд с matplotlib.use()
мог бы помочь.
можно установить с помощьюAxes.set()
. Фактически, целый ряд свойств можно установить с помощьюset()
, такие как галочки, метки, метки, заголовок и т. д. (которые настраивались отдельно в ОП).
ax = plt.gca()
ax.set(ylim=(20, 250), xlim=(0, 100))
Опять же, (и другие свойства) можно установить вplt.subplot
экземпляр тоже. Для случая в ОП это будет
aPlot = plt.subplot(321, facecolor='w', title="Year 1", ylim=(20,250), xticks=paramValues, ylabel='Average Price', xlabel='Mark-up')
# ^^^^ <---- ylim here
plt.plot(paramValues, plotDataPrice[0], color='#340B8C', marker='o', ms=5, mfc='#EB1717');
Устанавливатьylim
(и другие свойства) для нескольких подграфиков используйтеplt.setp
. Например, если мы включим в код OP еще два подзаголовка и хотим установить для всех из них одинаковые свойства, один из способов сделать это будет следующим:
import matplotlib.pyplot as plt
import random
plt.figure(1, figsize = (8.5,11))
plt.suptitle('plot title')
ax = []
paramValues = range(10)
for i in range(1, 4):
aPlot = plt.subplot(3,2,i, title=f"Year {i}")
ax.append(aPlot)
aPlot.plot(paramValues, [random.randint(20,200) for _ in paramValues], color='#340B8C', marker='o', ms=5, mfc='#EB1717')
aPlot.grid(True);
plt.setp(ax, ylim=(20,250), facecolor='w', xticks=paramValues, ylabel='Average Price', xlabel='Mark-up')
# ^^^^ <---- ylim here
plt.tight_layout();
Если оси (сгенерированные кодом под кодом, показанным в вопросе) делят диапазон с первыми осями, убедитесь, что вы установили диапазон после последнего графика этих осей.