2014-08-27 261 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