筆記參照《用Python做科學計算》的matplotlib部分。
凡例:a. [float]表示物件類型是float,用時不用加'['和']'。b. 代碼中的跳格表示換行。
Chap 5 matplotlib-繪製精美的圖表
1. artist對象的set_*方法和plt.setp()函數:line.set_antialiased(False),plt.setp(lines,color='r'),其中antialiased指反鋸齒效果。
2. plt.getp()只能對一個對象進行操作:指定屬性名稱,返回對象的指定屬性的值;以及不指定屬性名稱,顯示出對象的所有屬性和其值。
3. Figure對象和Axes對象的關係,以前蒙出來過,但是這個說得更明白:“Figure對象有一個axes屬性,其值為AxesSubplot對象的列表,每個AxesSubplot對象代表圖表中的一個子圖,前面所繪製的圖表只包含一個子圖,當前子圖也可以通過plt.gca獲得”。
4. Axes的背景顏色可通過axisbg這個關鍵字參數指定,同樣是單字母的,不確定是否能有全稱。奇怪的是用的是axis這個詞而非axes,不過座標軸是不能有什麼“背景”顏色的,所以估計也無妨了。
5. 繪製面積不一樣的subplot,例子:plt.subplot(221) plt.subplot(222) plt.subplot(212),就是開始跟電腦說要按2*2的格子畫這種格式下的第一張圖,即左上方那張(先上後下先左右後),然後是右上方那張,然後耍賴說第二行咱按2*1的格子畫這種格式下的第二張。可年的電腦!
6. 多張subplot軸情況下,調節之間的間距和軸與邊框之間的距離用subplots_adjust函數,通過指定left, right, bottom, top, wspace, hspace等幾個關鍵字參數進行調節,座標均遵照座標軸體系。
7. 查看使用者定義的rc檔案路徑:matplotlib.get_configdir()。當前使用的rc檔案的路徑:matplotlib.matplotlib_fname()。
8. rc檔案實際上是定義了一個字典,因此讀取的設定檔返回的是一個配置字典,顯示rc參數的的命令是:matplotlib.rc_params()。
9. 修改rc參數可以直接逐項修改字典中的索引值,也可以使用rc函數,比如:matplotlib.rc("lines", marker="x", linewidth=2, color="red") 。
10. 恢複預設rc設定:matplotlib.rcdefaults()。重載rc檔案(比如手動修改rc檔案之後):matplotlib.rcParams.update(matplotlib.rc_params())。
11. Text對象的_text屬性即是指定或預設分配的字元字串,比如:ax.xaxis.label._text,其中xlabel如果被我們指定為'time',則返回'time'。也可以類方法來返回這個屬性的值:ax.xaxis.label.get_text()。
12. Artist對象的共有屬性。以前嫌逐個翻譯和驗證官方文檔上的麻煩,不過不知道有什麼關鍵字參數還真抓瞎,不如順便抄錄下來:alpha,不透明度,值在0到1之間;animated,是否開啟動畫效果;axes,當前這個對象所在的Axes對象,無或不適用則為None;clip_box,對象的裁剪框;clip_on,是否裁剪;clip_path,裁剪的路徑;contains,判斷指定點是否在對象上的函數;figure,所在的Figure對象,可能為None;label,文字標籤;picker,控制Artist對象選取;transform,座標體系;visible,是否可見;zorder,控制繪圖順序。
13. 一次設定多個Artist對象屬性:fig.set(alpha=0.5, zorder=2)。逐個則類同1,set_*就好,比如:fig.set_alpha(0.5*fig.get_alpha())。
14. 為了支援pylab中的gca()等函數,Figure對象內部儲存有當前Axes的資訊,因此不建議直接對Figure.axes屬性進行列表操作,而代之以add_subplot, add_axes, add_patch, delaxes等類方法的使用,來進行添加和刪除操作。當然利用列表的特性有時也是有好處的,比如可以對Axes中的對象進行迭代操作。
15. plot返回的是一個Line2D對象的列表,因為我們可以傳遞多組X,Y軸的資料,一次繪製多條曲線,所以賦值的時候經常可見:line, = ax.plot(x, y, "-", color="blue", linewidth=2),不然line就會是一個列表,而非Line2D對象。原來如此。
16. 這個……也太智能了吧?(Python shell下)>>> rects <a list of 50 Patch objects>。
17. [Axes].hist()返回三個對象,分別是樣本空間,bin數目,和由此建立的Axes中的Rectangle對象組成的列表。
18. [Collections].get_size():返回Collections對象的PolygonCollection的數目,用於散佈圖。
19. 現在開始說Axis對象。副刻度的對象預設為matplotlib.ticker.NullLocator,不產生任何刻度標記;而計算主刻度的對象為matplotlib.ticker.AutoLocator,根據當前的縮放等配置自動計算刻度的位置。
20. 還有很多預定義的Locator對象,比如MultipleLocator ,以指定值的整數倍為刻度放置刻度標記。用法:MultipleLocator(np.pi/4)。
21. 另一個預定義的Locator,FuncFormatter,使用指定的Function Compute刻度文本,他會傳遞給所指定的函數兩個參數:刻度值和刻度序號,程式中通過比較笨的辦法計算出刻度值所對應的刻度文本。用法:FuncFormatter(pi_formatter),其中pi_formatter是一個自訂的函數。
至此看完,感覺對matplotlib的理解又加深了一點。下一步準備看幾個官網上提供的recipe,然後開始整理實驗資料,順便練慣用matplotlib作圖。