Matplotlib根据手动缩放的x轴缩放y轴
我有许多数据在x轴上相关,但都以非常不同的Y值为中心。 x上的数据也很长,所以很难看到细节。我希望能够为数据集手动设置x轴,然后根据位于该手动设置的x轴内的数据点的值自动重新缩放y轴本身。Matplotlib根据手动缩放的x轴缩放y轴
matplotlib可以吗?
基于从mdurant评论我写了一些小例子,作为一个起点,您:
import pylab as pl
pl.figure()
x = pl.rand(30)
x.sort()
y = pl.sin(2 * pl.pi * x) + 0.1 * pl.randn(30)
pl.plot(x, y)
def ondraw(event):
xlim = pl.gca().get_xlim()
y_sel = y[pl.logical_and(x > xlim[0], x < xlim[1])]
pl.gca().set_ylim((y_sel.min(), y_sel.max()))
pl.gcf().canvas.mpl_connect('draw_event', ondraw)
你可能要添加更多events处理鼠标移动等
一些评论:
- 我使用
pylab
,因为它提供了生成检验数据的有用功能。但是您也可以导入matplotlib
库。 - 的
ondraw
事件处理程序获取当前轴gca()
的当前x限制,与对应的X限度内x
坐标选择y
值,并设置由最小和选定的坐标的最大y值来确定新的y限制。 - 随着
mpl_connect
我们将事件处理程序附加到当前轴。每次绘制轴 - 例如由于新的绘图命令或手动用户交互 - 它调用ondraw
来更新y限制。
你能解释一下你的代码吗?你似乎使用pylab,但我正在使用matplotlib。 – user3123955 2014-08-27 21:38:43
@ user3123955:请查看[关于事件处理的matplotlib文档](http://matplotlib.org/users/event_handling.html)。 PyLab基本上是[另一个接口](http://en.wikipedia.org/wiki/Matplotlib)到NumPy和matplotlib,通常由以前的Matlab用户使用。你可以使用两者。这些命令几乎完全相同。 – Falko 2014-08-28 18:05:18
如果你使用'ax.set_aspect('equal')'你会得到这样的行为... – 2014-08-27 18:29:59
感谢你的回应,你可以扩展一下吗? 我需要先获取坐标轴吗?你怎么知道x轴是确定y轴的那个? – user3123955 2014-08-27 18:42:54
不会set_aspect('等于')导致y轴与x轴相同吗?我不想要这种行为,y轴的范围比x轴大得多,而且完全不同的值。我想设置x轴限制,然后让y自己缩放,这样我就可以轻松看到放置在我设置的x轴内的数据。我也没有x轴的大小和y的大小之间的关系,所以我不能只设置一些长宽比 – user3123955 2014-08-27 18:53:45