如何为上限设置‘ auto’,但是使用 matplotlib.pyplot 保持一个固定的下限

我想把 y 轴的上限设置为‘ auto’,但是我想让 y 轴的下限总是为零。我试过“自动”和“自动变焦”,但似乎都不管用。先谢谢你。

这是我的代码:

import matplotlib.pyplot as plt


def plot(results_plt,title,filename):


############################
# Plot results


# mirror result table such that each parameter forms an own data array
plt.cla()
#print results_plt
XY_results = []


XY_results = zip( *results_plt)


plt.plot(XY_results[0], XY_results[2], marker = ".")


plt.title('%s' % (title) )
plt.xlabel('Input Voltage [V]')
plt.ylabel('Input Current [mA]')


plt.grid(True)
plt.xlim(3.0, 4.2)  #***I want to keep these values fixed"
plt.ylim([0, 80]) #****CHANGE**** I want to change '80' to auto, but still keep 0 as the lower limit
plt.savefig(path+filename+'.png')
104374 次浏览

你可以只传递 leftrightset_xlim:

plt.gca().set_xlim(left=0)

对于 y 轴,使用 bottomtop:

plt.gca().set_ylim(bottom=0)

只要将 xlim设置为其中一个极限:

plt.xlim(left=0)

只要在@silvio 上添加一个点: 如果你使用轴像 figure, ax1 = plt.subplots(1,2,1)那样绘图,那么 ax1.set_xlim(xmin = 0)也可以!

如前所述,根据 matplotlib 文档,可以使用 matplotlib.axes.Axes类的 set_xlim方法设置给定轴 ax的 x 极限。

比如说,

>>> ax.set_xlim(left_limit, right_limit)
>>> ax.set_xlim((left_limit, right_limit))
>>> ax.set_xlim(left=left_limit, right=right_limit)

有一个限制可以保持不变(例如,左边的限制) :

>>> ax.set_xlim((None, right_limit))
>>> ax.set_xlim(None, right_limit)
>>> ax.set_xlim(left=None, right=right_limit)
>>> ax.set_xlim(right=right_limit)

为了设置当前轴的 x 极限,matplotlib.pyplot模块包含 xlim函数,该函数只包装 matplotlib.pyplot.gcamatplotlib.axes.Axes.set_xlim

def xlim(*args, **kwargs):
ax = gca()
if not args and not kwargs:
return ax.get_xlim()
ret = ax.set_xlim(*args, **kwargs)
return ret

类似地,对于 y 限制,使用 matplotlib.axes.Axes.set_ylimmatplotlib.pyplot.ylim。关键字参数是 topbottom

你也可以这样做:

ax.set_xlim((None,upper_limit))
ax.set_xlim((lower_limit,None))


如果您想使用 set () ,这将非常有帮助,它允许您同时设置多个参数:

ax.set(xlim=(None, 3e9), title='my_title', xlabel='my_x_label', ylabel='my_ylabel')

set_xlimset_ylim允许 None值实现这一点。但是,必须使用绘制数据的函数 之后。如果不这样做,它将使用默认的0表示左/底,1表示上/右。一旦设置了限制,它不会在每次绘制新数据时重新计算“自动”限制。

import matplotlib.pyplot as plt


fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([0, 1, 4, 5], [3, 5, 6, 9])
ax.set_xlim(left=2, right=None)
ax.set_ylim(bottom=None, top=7)


plt.show()

(也就是说,在上面的例子中,如果在最后执行 ax.plot(...),它不会产生预期的效果。)