python 如何设置y轴限制

rbl8hiat  于 2023-03-21  发布在  Python
关注(0)|答案(9)|浏览(236)

我需要帮助在matplotlib上设置y轴的限制。下面是我尝试过的代码,没有成功。

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。

oewdyzsn

oewdyzsn1#

通过plt.gca()获取当前轴,然后设置其限制:

ax = plt.gca()
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
isr3a4wc

isr3a4wc2#

你可以做的一件事是通过使用matplotlib.pyplot.axis自己设置轴范围。

matplotlib.pyplot.axis

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

0,10表示x轴范围。0,20表示y轴范围。
也可以使用matplotlib.pyplot.xlim或matplotlib.pyplot.ylim

matplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)
chhqkbe1

chhqkbe13#

另一种解决方法是获取图的轴并重新分配,只更改y值:

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

1l5u6lss4#

你可以从matplotlib.pyplot.axes示例化一个对象,然后调用它的set_ylim()。它会是这样的:

import matplotlib.pyplot as plt
axes = plt.axes()
axes.set_ylim([0, 1])
s2j5cfk0

s2j5cfk05#

只是为了微调。如果你想只设置轴的其中一个边界而让另一个边界不变,你可以选择下面的一个或多个语句

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

请查看xlimylim的文档

smtd7mpg

smtd7mpg6#

这至少在matplotlib 2.2.2版本中有效:

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

也许这是一个很好的方式来设置例如xmin和ymax,等等。

1rhkuytd

1rhkuytd7#

为了补充@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)

我发现当我想从默认的绘图设置中缩小或放大一点时,这特别有用。

bjg7j2ky

bjg7j2ky8#

这应该可以工作。你的代码对我来说是有效的,就像Tamás和Manoj Govindan一样。看起来你可以尝试更新Matplotlib。如果你不能更新Matplotlib(例如,如果你没有足够的管理权限),也许使用不同的后端matplotlib.use()会有所帮助。

wi3ka0sx

wi3ka0sx9#

ylim可以使用Axes.set()进行设置。事实上,可以通过set()设置一系列属性,例如tick,ticklabels,labels,title等(在OP中单独设置)。

ax = plt.gca()
ax.set(ylim=(20, 250), xlim=(0, 100))

同样,ylim(和其他属性)也可以在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的代码中包含2个以上的子图,并且如果我们想为所有子图设置相同的属性,一种方法如下:

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();

相关问题