如何在设置xlim后自动从屏幕上显示的数据设置ylim

时间:2013-08-11 15:08:39

标签: python matplotlib plot

例如,在我设置xlim之后,ylim比屏幕上显示的数据点范围更宽。当然,我可以手动选择一个范围并设置它,但我更愿意,如果它是自动完成的。

或者,至少,我们如何确定屏幕上显示的y范围的数据点?

在我设置xlim后立即绘图: plot right after I set xlim

手动设置ylim后的

情节: plot after I manually set ylim

3 个答案:

答案 0 :(得分:4)

这种方法适用于y(x)非线性的情况。给定要绘制的数组xy

lims = gca().get_xlim()
i = np.where( (x > lims[0]) &  (x < lims[1]) )[0]
gca().set_ylim( y[i].min(), y[i].max() )
show()

答案 1 :(得分:1)

确定您可以使用的y范围

ax = plt.subplot(111)
ax.plot(x, y)
y_lims = ax.get_ylim()

将返回当前y限制的元组。

但是,您可能需要通过在x限制处查找y数据的值来自动设置y限制。有很多方法可以做到这一点,我的建议是:

import matplotlib.pylab as plt
ax = plt.subplot(111)
x = plt.linspace(0, 10, 1000)
y = 0.5 * x
ax.plot(x, y)
x_lims = (2, 4)
ax.set_xlim(x_lims)

# Manually find y minimum at x_lims[0]
y_low = y[find_nearest(x, x_lims[0])]
y_high = y[find_nearest(x, x_lims[1])]
ax.set_ylim(y_low, y_high)

其中该功能归功于unutbu in this post

import numpy as np
def find_nearest(array,value):
    idx = (np.abs(array-value)).argmin()
    return idx

当数据y数据不是线性时,这会有问题。

答案 2 :(得分:0)

我发现@Saullo Castro的答案非常有用并略有改进。您可能希望调整限制许多不同的图。

import numpy as np
def correct_limit(ax, x, y):   
   # ax: axes object handle
   #  x: data for entire x-axes
   #  y: data for entire y-axes
   # assumption: you have already set the x-limit as desired
   lims = ax.get_xlim()
   i = np.where( (x > lims[0]) &  (x < lims[1]) )[0]
   ax.set_ylim( y[i].min(), y[i].max() )