我有許多數據在x軸上相關,但都以非常不同的Y值爲中心。 x上的數據也很長,所以很難看到細節。我希望能夠爲數據集手動設置x軸,然後根據位於該手動設置的x軸內的數據點的值自動重新縮放y軸本身。Matplotlib根據手動縮放的x軸縮放y軸
matplotlib可以嗎?
我有許多數據在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