2010-05-07 139 views
11

我想控制輪廓圖上matplotlib clabels的位置,但不使用clabel中的manual = True標誌。例如,我想指定一個x座標,並在通過這條線的點上創建標籤。我發現你可以使用get_position()來獲取各個標籤的位置,但我堅持這一點。任何幫助將不勝感激。謝謝!Matplotlib輪廓Clabel位置

回答

5

不,內置matplotlib沒有辦法做到這一點。您應該或者與默認位置一起居住,或者與手動和使用鼠標完全交互。

您可能想將其作爲上游的錯誤報告進行存檔,以便他們改進算法。

有多種方法可以解決這個問題。第一個是以編程方式將文字放置在輪廓圖上。您將無法以這種方式可靠地刪除文本下方的線條。假設你有一個輪廓c,你可以在c.collections找到輪廓線。對於每條輪廓線調用get_paths並將文本放置在該路徑上。

另一個選項將是用於替換手動放置的代碼(在matplotlib.contour.BlockingContourLabeler)或調整該查找標籤位置(在matplotlib.contour.locate_label)的代碼,但兩者的功能是相當緻密的。如果你能拿出爲locate_label的更換部件,只是簡單地覆蓋舊的方法在你順便說一句繪製的宏

def your_locate_label(self, linecontour, labelwidth): 
    # some magic 
    pass 

ar = np.array([[1,0], [0,1]] 
c = matplotlib.contour(ar) 
c.locate_label = your_locate_label 

c.clabel() 

,如果你使用ipython您可以輕鬆地

%psource c.clabel 
查看從交互式會話功能源

或直接調用您的文件$EDITOR是它與

%edit c.clabel 
+0

我沒有發現這個問題貼,所以我做了一個新問題:https://github.com/matplotlib/matplotlib/issues/613 – keflavich 2011-12-07 18:42:15

9

是的,現在有規定是一種控制標籤位置的方法! https://github.com/matplotlib/matplotlib/pull/642

plt.figure() 
CS = plt.contour(X, Y, Z) 
manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)] 
plt.clabel(CS, inline=1, fontsize=10, manual=manual_locations) 
+0

手動均可X,Y的迭代對象元組。將創建輪廓標籤,就像在每個x,y位置點擊鼠標一樣。 – Faber 2014-12-02 21:40:55

+2

有沒有辦法讓自動貼標籤,然後遍歷標籤來刪除(也許改進)任何相交的軸? – 2016-02-24 21:13:29