Matplotlib中關於坐標軸的控制

在二維平面內畫圖,如前篇文章Matplotlib中修改坐標軸刻度線的屬性所示,一共有分別為上下左右四個軸。那麼有時候我們只需要其中某些坐標軸出現,有時候又想讓坐標交叉點處於指定的位置。再比如還要給坐標軸加上一個箭頭,這都需要修改坐標軸的行為。這篇文章中主要解決下面幾個問題:

  1. 控制哪些坐標軸出現在圖中;
  2. 控制坐標交叉點的位置;
  3. 給坐標軸加上一個箭頭。

控制哪些坐標軸出現在圖中

在這一部分里,pylab中並沒有介面直接控制哪些坐標軸,因此需要利用函數gca。由於python的哲學是一切皆對象,實際上gca的用處並不大。我們這裡為了讓整個編程看起來就像一些命令的排列,就使用這個函數。

下面的一段代碼實現只出現左下兩個坐標軸,其他消失。

from pylab import *subplot(1,1,1)a=gca()a.spines[right].set_visible(False)a.spines[top].set_visible(False)show()


控制坐標交叉點的位置

(1) 坐標軸出現在圖的正中間

如果我們不指點軸的交叉點的坐標,而是總希望坐標軸出現在整幅圖的正中間,那麼下面這段代碼就可以實現,實際上是利用了spines的set_position這個函數。

from pylab import *subplot(1,1,1)a=gca()a.spines[right].set_visible(False)a.spines[top].set_visible(False)a.spines[left].set_position(center)a.spines[bottom].set_position(center)show()

(2) 指定坐標軸交叉點的坐標

坐標軸的交叉點並不一定要從(0,0)開始,我們也可以自己指定其位置,比如下面這段代碼。注意這裡面用到了xlim和ylim這兩個函數,因為在沒有曲線畫在圖上的時候,默認兩個軸的取值範圍總是從0-1。而這兩個函數在pylab中有說明,也比較簡單。

from pylab import *subplot(1,1,1)a=gca()a.spines[right].set_visible(False)a.spines[top].set_visible(False)a.spines[left].set_position((data, -1))a.spines[bottom].set_position((data, 1))xlim(-2,2)ylim(-2,2)show()

注意,上下兩個例子均使用了set_position這個函數,但是參數是不一樣的。第二個例子中我們將坐標軸的交叉點放在了(-1,1)這個位置。如果想讓交叉點處於圖的正中間,只要調整xlim和ylim這兩個函數的參數即可。


給坐標軸加上一個箭頭

如果要給坐標軸加上一個箭頭,從目前pylab中提供的介面是很難實現的。matplotlib提供了另外一個介面。在mpl_toolkits中有一個axisartist,它提供的函數可以修改更多的內容。原則上之前所有的修改,都可以通過axisartist實現。下面是給坐標軸加上一個箭頭的代碼。

from pylab import *from mpl_toolkits.axisartist.axislines import Subplot # 注意Subplot第一字母大寫a=figure(figsize=(10,2)) # 建立一個figureax=Subplot(a,111)a.add_subplot(ax) #將Subplot建立的坐標軸添加到figure a上ax.axis[right].set_visible(False)ax.axis[top].set_visible(False)ax.axis[left].set_axisline_style(->) # 給y軸加一個箭頭ax.axis[bottom].set_axisline_style(->) # 給x軸加一個箭頭show()


實際上,寫這一系列文章的主要原因就在於,Matplotlib的文檔相對來說,還是不太完整。很多內容散落在不同的地方,甚至還有很多只能去看源代碼。但是實際上在使用的時候,只要找到合適的方法解決問題就足夠了。

推薦閱讀:

python matplotlib中axes與axis的區別?
matplotlib.pyplot.imshow如何顯示灰度圖?
15張圖入門Matplotlib
基於matplotlib的2D/3D抽象網格和能量曲線繪製程序
Seaborn(sns)官方文檔學習筆記(第五章 分類數據的繪製)

TAG:Matplotlib | Python | 數據可視化 |