Matplotlib中annotate的簡單用法

用一個箭頭指向要注釋的地方,再寫上一段話的行為,叫做annotate。Matplotlib中提供了相應的函數來實現這個功能。因為要控制的細節會比較多,這裡僅介紹最直接簡單的實現方法。相應的內容大家可以參考

matplotlib.pyplot.annotate - Matplotlib 2.1.1 documentationmatplotlib.org圖標

Annotations - Matplotlib 2.1.1 documentationmatplotlib.org

中的相關細節。

寫一個簡單的注釋

首先用annotate實現一個簡單的注釋功能,代碼如下。

from pylab import *annotate(s="Nothing", xytext=(0.8, 0.8),xy=(0.2, 0.2), arrowprops=dict(arrowstyle="->"))#,show()

這是實現annotate的最簡單的版本,大家注意參數的含義。

  1. s: 注釋的內容,一段文字;
  2. xytext: 這段文字所處的位置;
  3. xy: 箭頭指向的位置;
  4. arrowprops: 通過arrowstyle表明箭頭的風格或種類。

箭頭的種類

我們首先來看一下內置箭頭的種類,如下面圖。可以通過設定arrowstyle來改變箭頭的形狀。

彎曲的箭頭

annotate中最重要的控制,全部由arrowprops這個變數完成,它是一個字典類型,可以控制箭頭的諸多屬性。含義比較明顯的有如下幾個,它們的作用和arrow中相應變數類似。

我們在這裡重要的是介紹另外一個控制箭頭彎曲的參數connectionstyle。它可以取的值如下圖,我們從簡單到複雜來看其效果。

arc3

from pylab import *arcs=[-0.5,0,0.5]suptitle(arc3,fontsize=20)k=0for i in arcs: subplot(1,3,k+1) title(rad=+str(i)) annotate(s=str(i), xy=(0.2, 0.2), xytext=(0.8, 0.8), arrowprops=dict(arrowstyle=->,connectionstyle=arc3,+rad=+str(i))) k+=1show()

angle3

from pylab import *angles=[(-90,0),(-90,0),(0,90),(0,-90)]suptitle(angle3,fontsize=20)k=0for i in angles: subplot(2,2,k+1) title(angleA=+str(i[0])+ angleB=+str(i[1])) annotate(s=, xy=(0.2, 0.2), xytext=(0.8, 0.8), arrowprops=dict(arrowstyle=->,connectionstyle=angle3,+angleA= +str(i[0])+,angleB=+str(i[1]))) k+=1show()

當然如果你想要更複雜的彎曲效果,arcbar可以實現更複雜的效果。但是大部分問題,通過arc3和angle3就可以得到解決。不過要注意的是,不是所有的箭頭類型都可以隨意彎曲的。fancy, simple, 和wedge三種類型的箭頭只能用arc3angle3 。

推薦閱讀:

技術專題—Python黑客【優質內容聚合貼】
為什麼 Python 不是 lexical scoping?
python之collection-deque
pandas 怎麼根據一列的數據的值的情況判斷來生成另外一列的數值?
為什麼Sublime Text不支持Python交互?

TAG:Matplotlib | Python | 可視化 |