matplotlib-繪製精美的圖標 第一節 快速繪圖(II)

配置屬性

matplotlib所繪製圖表的每個組成部分都和一個對象對應,可以通過調用這些對象的屬性設置方法set_*()或者pyplot模塊的屬性設置函數setp()來設置它們的屬性值。

例子
import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(4,3))
x = np.arange(0, 5, 0.1)
line = plt.plot(x, 0.05*x*x)[0]
#調用Line2D對象的Set_*()方法來設置屬性值,修改曲線的透明度
line.set_alpha(0.5)
#同時繪製sin cos 兩條曲線
lines = plt.plot(x, np.sin(x), x, np.cos(x))
#調用setp()可以同時配置多個對象屬性,這裏同時設置兩條曲線的顏色和線寬
plt.setp(lines, color="r", linewidth=4.0)

plt.legend()
plt.show()

與代碼部分set_*()  對應的是get_*()或者是通過plt.getp()來獲取對象的屬性值:

line.get_linewidth()
plt.getp(lines[0], "color")

該部分就不再過多贅述。


繪製多子圖


一個Figure對象可以包含多個子圖(Axes),在matplotlib中用Axes對象表示一個繪圖區域,稱之爲子圖。在前面的例子中,Figure對象只包括一個子圖。可以使用subplot()快速繪製包含多個子圖的圖表,調用形式如下:

subplot(numRows, numCols, plotNum)

圖表整個繪圖區域被等分成numRows行和numCols列,然後從左到右,從上到下的順序對每個區域進行編號,左上區域的編號爲1.plotNum參數指定所創建Axes對象的區域。如果numRows, numCols, plotNum三個參數都小於 10 ,則可把它們縮寫成一個整數。例如subplot(323)和subplot(3,2,3)的含義相同。如果新創建的子圖和之前創建的子圖區域有重疊的部分,之前的子圖將被刪除。


看下面代碼

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(8,6))
for idx, color in enumerate("rgbyck"):
    plt.subplot(321+idx, axisbg=color)


plt.legend()
plt.show()

效果如圖



圖中將整個繪圖區域等分按照numRows, numCols設定的多個子圖,如果希望某個子圖佔據整行或整列,可以按照如下方法調用subplot()

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(8,6))

plt.subplot(221)
plt.subplot(222)
plt.subplot(212)

plt.legend()
plt.show()

效果如圖

subplot()返回它所創建的Axes對象,我們可以將這些對象保存起來,然後用sca()交替讓它們成爲當前Axes對象,並使用plot()在其中繪圖。如果需要同時繪製多幅圖表,可以給figure()傳遞一個整數參數來指定Figure對象的序號。如果序號指定的Figure對象已經存在,將不創建新的對象,而只是讓它成爲當前Figure對象。

import matplotlib.pyplot as plt
import numpy as np

plt.figure(1)
plt.figure(2)

ax1 = plt.subplot(121)
ax2 = plt.subplot(122)

x = np.linspace(0,3,100)
for i in range(5):
    plt.figure(1)
    plt.plot(x, np.exp(i*x/3))
    plt.sca(ax1)
    plt.plot(x, np.sin(i*x))
    plt.sca(ax2)
    plt.plot(x, np.cos(i+x))

plt.legend()
plt.show()



首先通過figure()創建了兩個圖表,它們的序號分別爲1和2。然後在圖表2中創建了左右並排的兩個子圖,並用變量ax1,ax2保存。
在循環中,先調用figure(1)讓圖表1成爲當前圖表,並在其中繪圖。然後調用sca(ax1)和sca(ax2)分別讓子圖ax1和ax2成爲當前子圖,並在其中繪圖。當它們成爲子圖時,包含它們的圖表2也自動成爲當前圖表,因此不需要調用figure(2)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章