Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 设置xlim后如何根据屏幕上显示的数据自动设置ylim_Python_Matplotlib_Plot - Fatal编程技术网

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

Python 设置xlim后如何根据屏幕上显示的数据自动设置ylim,python,matplotlib,plot,Python,Matplotlib,Plot,例如,设置xlim后,ylim比屏幕上显示的数据点范围宽。当然,我可以手动选择一个范围并进行设置,但我更希望它是自动完成的 或者,至少,我们如何确定屏幕上显示的数据点的y范围 设置xlim后立即打印: 手动设置ylim后的绘图: 如果y(x)是非线性的,这种方法将起作用。给定要绘制的数组x和y: lims = gca().get_xlim() i = np.where( (x > lims[0]) & (x < lims[1]) )[0] gca().set_ylim(

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

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

设置xlim后立即打印:

手动设置ylim后的绘图:

如果
y(x)
是非线性的,这种方法将起作用。给定要绘制的数组
x
y

lims = gca().get_xlim()
i = np.where( (x > lims[0]) &  (x < lims[1]) )[0]
gca().set_ylim( y[i].min(), y[i].max() )
show()
lims=gca()
i=np,其中((x>lims[0])&(x
确定您可以使用的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)
该功能应归功于


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

我发现@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() ) 
将numpy导入为np
def正确_限制(ax、x、y):
#ax:轴对象句柄
#x:整个x轴的数据
#y:整个y轴的数据
#假设:您已经根据需要设置了x限制
lims=ax.get_xlim()
i=np,其中((x>lims[0])&(x
谢谢Saullo,但是,自动缩放(axis='y')仍然根据完整的数据集计算数据范围,包括屏幕上未显示的数据点谢谢您的反馈。。我已经更新了一个案例的答案,
y(x)
是非线性的……对我来说,你的答案是最容易混淆的。但是有一个快速的改进,我们可以通过在y[find_nearest(x,x_lims[0])和y[find_nearest(x,x_lims[1])之间取最小值和最大值来找到y_low和y high,即:
y_low=y[find_nearest(x,x_lims[0]):find_nearest(x,x_lims[1])。min()y_high=y[find_nearest(x,x,x_lims[0]):find_nearest(x,x,x_lims[1])。
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() )