2017-05-05 82 views
0

我想使用相同的註釋來註釋2個點,並且我希望有2個箭頭指向1個註釋。如何在matplotlib的註釋中設置箭頭的起點?

我有以下代碼:

import matplotlib.pyplot as plt 

plt.plot([1,2], [1,2], 'o') 
plt.xlim([0,3]) 
plt.ylim([0,3]) 

plt.annotate('Yet another annotation', xy=(1,1), 
       xytext=(1.5, .5), 
       arrowprops=dict(arrowstyle="->") 
      ) 
plt.annotate('Yet another annotation', xy=(2,2), 
       xytext=(1.5, .5), 
       arrowprops=dict(arrowstyle="->") 
      ) 

plt.show() 

正如你可以在結果圖中看到,它的作品(雖然它可能不是最優雅的方式,因爲我有兩個註解在完全相同的位置)。

Annotation

我,不過,不滿的是:我想,讓箭在完全相同的位置開始,目前他們似乎從註釋的中心開始,我寧願讓他們從註釋邊緣的某個地方開始,以便它們的起點連接起來。

我該如何做到這一點?

回答

2

您可以註釋箭頭的起點。即讓兩個箭頭從沒有註釋文本的相同位置開始,然後使用不帶箭頭的第三個註釋來用文本註釋此起始點。

import matplotlib.pyplot as plt 

plt.plot([1,2], [1,2], 'o') 
plt.xlim([0,3]) 
plt.ylim([0,3]) 

plt.annotate("", xy=(1,1), xytext=(1.3, 2.5), 
       arrowprops=dict(arrowstyle="->")) 
plt.annotate('', xy=(2,2), xytext=(1.3, 2.5), 
       arrowprops=dict(arrowstyle="->")) 
plt.annotate('Some annotation', xy=(1.3, 2.5), 
       xytext=(1.3, 2.5) , va = "bottom", ha="center") 

plt.annotate("", xy=(1,1), xytext=(1.5, .5), 
       arrowprops=dict(arrowstyle="->",shrinkA=0)) 
plt.annotate('', xy=(2,2), xytext=(1.5, .5), 
       arrowprops=dict(arrowstyle="->",shrinkA=0)) 
plt.annotate('Yet another annotation', xy=(1.5, .5), 
       xytext=(1.5, .5) , va = "top", ha="left") 

plt.show() 

enter image description here

您可以使用arrowprops關鍵shrinkA調整箭頭的收縮,其設置爲零讓兩個箭頭連接起來。

+0

謝謝!對於*水平對齊*,垂直對齊*和「哈」是「va」嗎? – Alf

+1

這是正確的。你實際上也可以使用'horizo​​ntalalignment =「left」',它只是很長的類型。 – ImportanceOfBeingErnest