我需要帮助设置 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))
有了这个图的数据,我得到了 20 和 200 的 y 轴限制。但是,我想要限制 20 和 250。
plt.show()
以显示情节,则适用于 Matplotlib 1.0.0。您使用的是哪个版本和哪个后端?
plt.ylim((25,250))
和 plt.ylim(ymax = 250, ymin = 25)
。我正在使用 Agg
后端。
axisbg
现已弃用
plt.ylim
是解决此问题的正确现代解决方案。这是一个很好的资源:showmecode.info/matplotlib/axes/set-limits
通过 plt.gca()
获取当前轴,然后设置其限制:
ax = plt.gca()
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
另一种解决方法是获取绘图的轴并重新分配仅更改 y 值:
x1,x2,y1,y2 = plt.axis()
plt.axis((x1,x2,25,250))
x1
和 x2
,你可以让 matplotlib 用 None
推断这些。
您可以做的一件事是使用 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)
您可以从 matplotlib.pyplot.axes
实例化一个对象并在其上调用 set_ylim()
。它会是这样的:
import matplotlib.pyplot as plt
axes = plt.axes()
axes.set_ylim([0, 1])
这至少在 matplotlib 2.2.2 版中有效:
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)
当我想从默认绘图设置中缩小或放大一点时,我发现这特别有用。
这应该有效。你的代码对我有用,比如 Tamás 和 Manoj Govindan。看起来你可以尝试更新 Matplotlib。如果您无法更新 Matplotlib(例如,如果您没有足够的管理权限),则使用带有 matplotlib.use()
的不同后端可能会有所帮助。
matplotlib.use('PDF')
)。我正在使用最新版本的 Enthought Python Distribution 附带的版本。你能看看它是否适用于PDF后端。谢谢!
plt.savefig()
进行了更新吗?
plt.subplot
行中取出 aPlot =
,它也适用于我。似乎如果将子图分配给这样的变量,则必须使用其他一些设置轴限制的方法。真的吗?
plt.ylim()
将限制应用于当前坐标区,这些限制是在您执行 plt.subplot()
时设置的。我也不敢相信 plt.subplot()
关心它返回的轴的使用方式(是否放入变量等)。所以我会说它应该工作;它在我的机器上工作。
None
将计算留给 matplotlib,例如axes.set_ylim([ymin,None])
None
:set_ylim(bottom=None, top=None, [...], *, ymin=None, ymax=None)
。bottom
和ymin
(等效)为最小值。top
和ymax
) 最大等效。您不能同时使用bottom
和ymin
。与top
和ymax
相同。