1. 程式人生 > >Python 科學計算學習三:matplotlib-繪製精美的圖表(1)

Python 科學計算學習三:matplotlib-繪製精美的圖表(1)

matplotlib 是python最著名的繪相簿,它提供了一整套和matlab相似的命令API,十分適合互動式地 進行製圖。而且也可以方便地將它作為繪圖控制元件,嵌入GUI應用程式中。

1 快速繪圖

matplotlib中的快速繪圖的函式庫可以通過如下語句載入:

import matplotlib.pyplot as plt

matplotlib的pyplot子庫提供了和matlab類似的繪圖API,方便使用者快速繪製2D圖表。讓我們先來看 一個簡單的例子:

# -*- coding: utf-8 -*-
import numpy as np    #匯入函式庫
import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) #建立陣列 y = np.sin(x) z = np.cos(x**2) plt.figure(figsize=(8,4)) #呼叫figure建立一個繪圖物件 #呼叫plot函式,指定曲線名字、顏色、曲線寬度 plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2) plt.plot(x,z,"b--",label="$cos(x^2)$")#引數''b--``指定曲線的顏色和線型,中b表示藍色,''--``表示線型為虛線
plt.xlabel("Time(s)") #設定x軸文字 plt.ylabel("Volt") #設定y軸文字 plt.title("PyPlot First Example") #設定圖示標題 plt.ylim(-1.2,1.2) #設定y軸範圍 plt.legend() #顯示圖示 plt.show() #顯示建立的所有繪圖物件

實驗結果:
這裡寫圖片描述
matplotlib所繪製的圖的每個組成部分都對應有一個物件,我們可以通過呼叫這些物件的屬 性設定方法set_*或者pyplot的屬性設定函式setp設定其屬性值。例如plot函式返回一個 matplotlib.lines.Line2D 物件的列表,下面的例子顯示如何設定Line2D物件的屬性:

x = np.arange(0, 5, 0.1)
line, = plt.plot(x, x*x) # plot返回一個列表,通過line,獲取其第一個元素 

# 呼叫Line2D物件的set_*方法設定屬性
line.set_antialiased(False)

# 同時繪製sin和cos兩條曲線,lines是一個有兩個Line2D物件的列表 
lines = plt.plot(x, np.sin(x), x, np.cos(x))

# 呼叫setp函式同時配置多個Line2D物件的多個屬性值 
plt.setp(lines, color="r", linewidth=2.0)

2 繪製多軸圖

一個繪圖物件(figure)可以包含多個軸(axis),在Matplotlib中用軸表示一個繪圖區域,可以將其理解 為子圖。上面的第一個例子中,繪圖物件只包括一個軸,因此只顯示了一個軸(子圖)。我們可以使用 subplot函式快速繪製有多個軸的圖表。subplot函式的呼叫形式如下:

subplot(numRows, numCols, plotNum)

subplot將整個繪圖區域等分為numRows行 * numCols列個子區域,然後按照從左到右,從上到下 的順序對每個子區域進行編號,左上的子區域的編號為1。下面的程式建立3行2列共6個軸,通過axisbg引數給每個軸設定不同的背景顏色。

for idx, color in enumerate("rgbyck"):
    plt.subplot(320+idx+1, facecolor=color)#原來axisbg已經被facecolor替換掉了
plt.show()

實驗結果:
這裡寫圖片描述
如果希望某個軸佔據整個行或者列的話,可以如下呼叫subplot:

plt.subplot(221) # 第一行的左圖 
plt.subplot(222) # 第一行的右圖 
plt.subplot(212) # 第二整行 
plt.show()

呈現為:
這裡寫圖片描述

3 配置檔案

一幅圖有許多需要配置的屬性,例如顏色、字型、線型等等。我們在繪圖時,並沒有一一對這些屬性 進行配置,許多都直接採用了Matplotlib的預設配置。Matplotlib將預設配置儲存在一個檔案中,通 過更改這個檔案,我們可以修改這些屬性的預設值。
通過下面的語句可以獲取使用者配置路徑:

>>> import matplotlib
>>> matplotlib.get_configdir()
'C:\\Users\\juzi\\.matplotlib'

通過下面的語句可以獲得目前使用的配置檔案的路徑:

>>> matplotlib.matplotlib_fname()
'D:\\software\\Anaconda3\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'

由於在當前路徑和使用者配置路徑中都沒有找到位置檔案,因此最後使用的是系統配置路徑下的配置文 件。如果你將matplotlibrc複製一份到指令碼的當前目錄下:
這裡寫圖片描述
然後os.getcwd()函式獲得當前的路徑,複製配置檔案之後再通過matplotlib.matplotlib_fname()以獲得目前使用的配置檔案的路徑。
這裡寫圖片描述
如果你用文字編輯器開啟此配置檔案的話,你會發現它實際上是定義了一個字典。配置檔案的讀入可以使用 rc_params 函式,它返回一個配置字典:
這裡寫圖片描述
在matplotlib模組載入的時候會呼叫rc_params:matplotlib.rcParams,並把得到的配置字典儲存到rcParams變數中。
matplotlib將使用rcParams中的配置進行繪圖。使用者可以直接修改此字典中的配置,所做的改變會反 映到此後所繪製的圖中。例如下面的指令碼所繪製的線將帶有圓形的點識別符號:

matplotlib.rcParams["lines.marker"] = "o" 
import pylab 
pylab.plot([1,2,3]) 
pylab.show()

這裡寫圖片描述
為了方便配置,可以使用rc函式,下面的例子同時配置點識別符號、線寬和顏色:

matplotlib.rc("lines", marker="x", linewidth=2, color="b")
pylab.plot([1,2,3])

這裡寫圖片描述
如果希望恢復到預設的配置(matplotlib載入時從配置檔案讀入的配置)的話,可以呼叫 rcdefaults 函式:

 matplotlib.rcdefaults()

如果手工修改了配置檔案,希望重新從配置檔案載入最新的配置的話,可以呼叫:

matplotlib.rcParams.update( matplotlib.rc_params() )