2014-08-27 214 views
2

我有许多数据在x轴上相关,但都以非常不同的Y值为中心。 x上的数据也很长,所以很难看到细节。我希望能够为数据集手动设置x轴,然后根据位于该手动设置的x轴内的数据点的值自动重新缩放y轴本身。Matplotlib根据手动缩放的x轴缩放y轴

matplotlib可以吗?

+0

如果你使用'ax.set_aspect('equal')'你会得到这样的行为... – 2014-08-27 18:29:59

+0

感谢你的回应,你可以扩展一下吗? 我需要先获取坐标轴吗?你怎么知道x轴是确定y轴的那个? – user3123955 2014-08-27 18:42:54

+0

不会set_aspect('等于')导致y轴与x轴相同吗?我不想要这种行为,y轴的范围比x轴大得多,而且完全不同的值。我想设置x轴限制,然后让y自己缩放,这样我就可以轻松看到放置在我设置的x轴内的数据。我也没有x轴的大小和y的大小之间的关系,所以我不能只设置一些长宽比 – user3123955 2014-08-27 18:53:45

回答

2

基于从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限制。
+0

你能解释一下你的代码吗?你似乎使用pylab,但我正在使用matplotlib。 – user3123955 2014-08-27 21:38:43

+0

@ 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