2017-03-22 76 views
1

有沒有辦法讓matplotlib的quiverstreamplot函數使用圖像座標約定(原點在左上角,+ y點向下),而不是標準座標慣例(原點在左下角,+ y點)?如何讓matplotlib的流/箭圖在圖像座標中繪圖

上下文:

我使用既quiverstreamplot可視化的兩個圖像之間的光流場。你可以在下面看到一個例子。

Optical flow visualization using streamplot

不幸的是,quiverstreamplot都期望在傳統的座標來定義流場,而我的流場被定義在圖像座標。

在上面的圖像中,我手動將流轉換爲傳統座標,然後將其傳遞到streamplot。流線顯示正確,但軸標籤仍處於常規座標中。注意他們如何不同意前兩張圖像的軸標籤。

我可以手動轉換軸標籤爲好,但有我只得到streamplotquiver明白,流場圖像中定義的座標約定一些簡單的方法,並應顯示爲這樣的(在原點左上角,+ y點下降)?

回答

1

如果您想精確模擬圖像軸的顯示(包括偏移和y軸反轉),那麼您可以檢索前兩個axes其中一個的x和y限制,然後應用他們的streamplot

hax1 = plt.subplot(3, 1, 1) 
hax1.imshow(image1) 

hax2 = plt.subplot(3, 1, 2) 
hax2.imshow(image2) 

hax3 = plt.subplot(3, 1, 3) 
hax3.streamplot(x, y, u, v) 
hax3.set_xlim(hax1.get_xlim()) 
hax3.set_ylim(hax1.get_ylim()) 
+0

其實,這不只是逆轉y軸標籤,但也垂直翻轉圖(和移動原點到左上)。所以現在我不必將流場從圖像座標轉換爲傳統座標,然後將其傳遞給顫抖/流線圖。完善! – SuperElectric

+0

(在添加set_xlim,set_ylim之後):酷;我已經手動將流場的x&y座標移動了[.5,.5],但是我忘記了這並不反映在座標軸上。現在,我可以按原樣傳遞流動座標,不移位和未翻轉,並且使流圖/顫圖和軸標籤與imshow保持一致。 – SuperElectric