2014-06-19 57 views
0

在python的matplotlib中,對於牛頓方法的文章,我想將前三個迭代和最後一個在線圖中可視化,其中每個迭代顯示爲單獨的曲線。圖例標籤將如'迭代1','迭代2','迭代3','迭代14'。爲了清晰起見,我想從最後一個視覺上抵消前三個,或者用一些空白或者理想地用三個點來表示跳躍。有沒有人知道實現這個目標的方法?抵消matplotlib的圖例項目之一

回答

0

您可以顯示2個圖例。與3次迭代的第一,第二與最後一次迭代:

l1 = plt.legend(data_for, 3_iterations, loc=[1.01,0.6]) 
l2 = plt.legend(data_for, last_iteration, loc=[1.01,0.2]) 
plt.gca().add_artist(l1) # to add back first legend 

loc允許您選擇圖例的位置。這裏將在圖的右側,並且在l2之上的l1。你可以修改它,使其儘可能清晰。

對於三重點,您可以將它們與plt.text(x,y,"...")相加,其中x和y是您想要'...'的座標。

如果你用你的代碼編輯你的問題,以一個工作的例子,我可能會更精確。


其他解決方案:

比方說leg是傳說對象,你可以移動圖例的某些部分。例如,如果你想移動的傳奇第二行([1]):

L2 = leg.get_lines()[1] 
L2.set_ydata(np.array(L2.get_ydata())-2) # move down of 2 units the line (in the legend based coordinates) 

,以將相關的文字:

T2 = leg.texts[1] 
T2.set_y(-2) 

和框架:

frame = leg.get_frame() 
frame.set_height(frame.get_height()+20) 

對於框架,它實際上不適合我,我不知道爲什麼。也許它會爲你工作。 或者,你可以使用:

leg=plt.legend(borderpad=2) 

一步一步,你可以設置你的傳奇。可以很長,但我會選擇第一個選項,因爲你可以刪除框架,它不會引人注目。

希望這有助於

+0

嗨,我在想,同時仍然在一個框移動條目,但這無疑是一個很好的備份解決方案。謝謝! – gertjan

+0

@gertjan我使用另一個解決方案編輯答案 – jrjc

+0

這看起來像是我正在尋找的解決方案的類型,但是當我嘗試時,只有線條向下移動,而不是文本。此外,邊界框不會放大以包含移位的內容。我簡要了解了圖例對象,但無法猜測如何解決這個問題。 – gertjan