在matplotlib中设置y轴限制


416

我需要在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。


1
如果我plt.show()在末尾添加以显示图,则可以与Matplotlib 1.0.0一起使用。您正在使用哪个版本和哪个后端?
塔玛斯

14
使用Matplotlib 0.98.5.2,Python 2.6.2为我工作。我都尝试过plt.ylim((25,250))plt.ylim(ymax = 250, ymin = 25)。我正在使用Agg后端。
Manoj Govindan

1
感谢你们俩。它适用于您的PDF后端吗?
Curious2learn 2010年

1
注意:axisbg现已弃用
SherylHohman

Answers:


616

尝试这个 。也适用于子图。

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

201
顺便说一句,这是一个愚蠢缩写的意思是“ 等的Ç urrent 一个 XES”。
Lenar Hoyt

32
您还可以设置一个None将计算axes.set_ylim([ymin,None])
保留

129

您的代码也对我有用。但是,另一种解决方法是获取图的轴,然后仅更改y值:

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


1
您可以只设置x1和x2无。
Hielke Walinga

78

您可以做的一件事是使用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)


16

这至少在matplotlib 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

这应该工作。您的代码对我有效,例如Tamás和Manoj Govindan。看来您可以尝试更新Matplotlib。如果您无法更新Matplotlib(例如,如果您的管理权限不足),也许使用其他后端matplotlib.use()可能会有所帮助。


感谢您的检查!我正在使用pdf后端(matplotlib.use('PDF'))。我正在使用最新版本的Enthought Python发行版随附的版本。您能否查看它是否适用于PDF后端。谢谢!
Curious2learn 2010年

在Mac OS X上,它可以与PDF后端一起使用。您确定输出文件确实使用来更新了plt.savefig()吗?
埃里克·O·勒比戈特

我想我意识到了问题。如果我排在队伍aPlot =中,plt.subplot它也对我有用。看来,如果像这样将子图分配给变量,则必须使用其他一些设置轴极限的方法。真的吗?
Curious2learn

1
据我所知,plt.ylim()将限制应用于当前轴,当您这样做时会设置这些限制plt.subplot()。我也不能相信plt.subplot()关心它返回的轴是如何使用的(是否放入变量等)。所以我说它应该起作用;它确实可以在我的机器上工作。
埃里克·O·勒比戈特

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

查看有关xlimylim的文档


0

如果某个轴(由问题下方代码下方的代码生成)与第一个轴共享范围,请确保将范围设置为该轴的最后一个绘图之后

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.