當前位置:
首頁 > 知識 > Python 繪圖庫 Matplotlib 入門教程

Python 繪圖庫 Matplotlib 入門教程

(點擊

上方公眾號

,可快速關注)




來源:強波的技術博客


qiangbo.space/2018-04-06/matplotlib_l1/




Matplotlib是一個Python語言的2D繪圖庫,它支持各種平台,並且功能強大,能夠輕易繪製出各種專業的圖像。本文是對它的一個入門教程。



運行環境




由於這是一個Python語言的軟體包,因此需要你的機器上首先安裝好Python語言的環境。關於這一點,請自行在網路上搜索獲取方法。




關於如何安裝Matplotlib請參見這裡:Matplotlib Installing。



筆者推薦大家通過pip的方式進行安裝,具體方法如下:





sudo pip3 install 

matplotlib




本文的代碼在如下環境中測試:






  • Apple OS X 10.13



  • Python 3.6.3



  • matplotlib 2.1.1



  • numpy 1.13.3




介紹



Matplotlib適用於各種環境,包括:






  • Python腳本



  • IPython shell



  • Jupyter

     notebook



  • Web應用伺服器



  • 用戶圖形界面工具包




使用Matplotlib,能夠的輕易生成各種類型的圖像,例如:直方圖,波譜圖,條形圖,散點圖等。並且,可以非常輕鬆的實現定製。




入門代碼示例




下面我們先看一個最簡單的代碼示例,讓我們感受一下Matplotlib是什麼樣的:





# test.py


 


import 

matplotlib

.

pyplot 

as

 

plt


import numpy 

as

 

np


 


data

 = 

np

.

arange

(

100

,

 

201

)


plt

.

plot

(

data

)


plt

.

show

()




這段代碼的主體邏輯只有三行,但是它卻繪製出了一個非常直觀的線性圖,如下所示:







對照著這個線形圖,我們來講解一下三行代碼的邏輯:






  1. 通過np.arange(100, 201)生成一個[100, 200]之間的整數數組,它的值是:[100, 101, 102, … , 200]



  2. 通過matplotlib.pyplot將其繪製出來。很顯然,繪製出來的值對應了圖中的縱坐標(y軸)。而matplotlib本身為我們設置了圖形的橫坐標(x軸):[0, 100],因為我們剛好有100個數值



  3. 通過plt.show()將這個圖形顯示出來




這段代碼非常的簡單,運行起來也是一樣。如果你已經有了本文的運行環境,將上面的代碼保存到一個文本文件中(或者通過

Github

獲取本文的源碼),然後通過下面的命令就可以在你自己的電腦上看到上面的圖形了:





python3 

test

.

py


 



注1:後面的教程中,我們會逐步講解如何定製圖中的每一個細節。例如:坐標軸,圖形,著色,線條樣式,等等。



注2:如果沒有必要,下文的截圖會去掉圖形外側的邊框,只保留圖形主體。




一次繪製多個圖形




有些時候,我們可能希望一次繪製多個圖形,例如:兩組數據的對比,或者一組數據的不同展示方式等。




可以通過下面的方法創建多個圖形:




多個figure




可以簡單的理解為一個figure就是一個圖形窗口。matplotlib.pyplot會有一個默認的figure,我們也可以通過plt.figure()創建更多個。如下面的代碼所示:





# figure.py


 


import 

matplotlib

.

pyplot 

as

 

plt


import numpy 

as

 

np


 


data

 = 

np

.

arange

(

100

,

 

201

)


plt

.

plot

(

data

)


 


data2

 = 

np

.

arange

(

200

,

 

301

)


plt

.

figure

()


plt

.

plot

(

data2

)


 


plt

.

show

()




這段代碼繪製了兩個窗口的圖形,它們各自是一個不同區間的線形圖,如下所示:








註:初始狀態這兩個窗口是完全重合的。




多個subplot




有些情況下,我們是希望在同一個窗口顯示多個圖形。此時就這可以用多個subplot。下面是一段代碼示例:





# subplot.py


 


import 

matplotlib

.

pyplot 

as

 

plt


import numpy 

as

 

np


 


data

 = 

np

.

arange

(

100

,

 

201

)


plt

.

subplot

(

2

,

 

1

,

 

1

)


plt

.

plot

(

data

)


 


data2

 = 

np

.

arange

(

200

,

 

301

)


plt

.

subplot

(

2

,

 

1

,

 

2

)


plt

.

plot

(

data2

)


 


plt

.

show

()




這段代碼中,除了subplot函數之外都是我們熟悉的內容。subplot函數的前兩個參數指定了subplot數量,即:它們是以矩陣的形式來分割當前圖形,兩個整數分別指定了矩陣的行數和列數。而第三個參數是指矩陣中的索引。




因此,下面這行代碼指的是:2行1列subplot中的第1個subplot。





plt

.

subplot

(

2

,

 

1

,

 

1

)


 


下面這行代碼指的是:2行1列subplot中的第2個subplot。





plt

.

subplot

(

2

,

 

1

,

 

2

)


 


所以這段代碼的結果是這個樣子:







subplot函數的參數不僅僅支持上面這種形式,還可以將三個整數(10之內的)合併一個整數。例如:2, 1, 1可以寫成211,2, 1, 2可以寫成212。




因此,下面這段代碼的結果是一樣的:





import 

matplotlib

.

pyplot 

as

 

plt


import numpy 

as

 

np


 


data

 = 

np

.

arange

(

100

,

 

201

)


plt

.

subplot

(

211

)


plt

.

plot

(

data

)


 


data2

 = 

np

.

arange

(

200

,

 

301

)


plt

.

subplot

(

212

)


plt

.

plot

(

data2

)


 


plt

.

show

()





subplot函數的詳細說明參見這裡:

matplotlib.pyplot.subplot




常用圖形示例




Matplotlib可以生成非常多的圖形式樣,多到令人驚嘆的地步。大家可以在這裡:

Matplotlib Gallery

 感受一下。




本文作為第一次的入門教程,我們先來看看最常用的一些圖形的繪製。




線性圖




前面的例子中,線性圖的橫軸的點都是自動生成的,而我們很可能希望主動設置它。另外,線條我們可能也希望對其進行定製。看一下下面這個例子:





# plot.py


 


import 

matplotlib

.

pyplot 

as

 

plt


 


plt

.

plot

([

1

,

 

2

,

 

3

],

 

[

3

,

 

6

,

 

9

],

 

"-r"

)


plt

.

plot

([

1

,

 

2

,

 

3

],

 

[

2

,

 

4

,

 

9

],

 

":g"

)


 


plt

.

show

()




這段代碼可以讓我們得到這樣的圖形:







這段代碼說明如下:






  1. plot函數的第一個數組是橫軸的值,第二個數組是縱軸的值,所以它們一個是直線,一個是折線;



  2. 最後一個參數是由兩個字元構成的,分別是線條的樣式和顏色。前者是紅色的直線,後者是綠色的點線。關於樣式和顏色的說明請參見plot函數的API Doc:

    matplotlib.pyplot.plot




散點圖




scatter函數用來繪製散點圖。同樣,這個函數也需要兩組配對的數據指定x和y軸的坐標。下面是一段代碼示例:





# scatter.py


 


import 

matplotlib

.

pyplot 

as

 

plt


import numpy 

as

 

np


 


N

 = 

20


 


plt

.

scatter

(

np

.

random

.

rand

(

N

)

 * 

100

,


            

np

.

random

.

rand

(

N

)

 * 

100

,


            

c

=

"r"

,

 

s

=

100

,

 

alpha

=

0.5

)


 


plt

.

scatter

(

np

.

random

.

rand

(

N

)

 * 

100

,


            

np

.

random

.

rand

(

N

)

 * 

100

,


            

c

=

"g"

,

 

s

=

200

,

 

alpha

=

0.5

)


 


plt

.

scatter

(

np

.

random

.

rand

(

N

)

 * 

100

,


            

np

.

random

.

rand

(

N

)

 * 

100

,


            

c

=

"b"

,

 

s

=

300

,

 

alpha

=

0.5

)


 


plt

.

show

()




這段代碼說明如下:






  1. 這幅圖包含了三組數據,每組數據都包含了20個隨機坐標的位置



  2. 參數c表示點的顏色,s是點的大小,alpha是透明度




這段代碼繪製的圖形如下所示:








scatter函數的詳細說明參見這裡:

matplotlib.pyplot.scatter




餅狀圖




pie函數用來繪製餅狀圖。餅狀圖通常用來表達集合中各個部分的百分比。





# pie.py


 


import 

matplotlib

.

pyplot 

as

 

plt


import numpy 

as

 

np


 


labels

 = 

[

"Mon"

,

 

"Tue"

,

 

"Wed"

,

 

"Thu"

,

 

"Fri"

,

 

"Sat"

,

 

"Sun"

]


 


data

 = 

np

.

random

.

rand

(

7

)

 * 

100


 


plt

.

pie

(

data

,

 

labels

=

labels

,

 

autopct

=

"%1.1f%%"

)


plt

.

axis

(

"equal"

)


plt

.

legend

()


 


plt

.

show

()




這段代碼說明如下:






  1. data是一組包含7個數據的隨機數值



  2. 圖中的標籤通過labels來指定



  3. autopct指定了數值的精度格式



  4. plt.axis("equal")設置了坐標軸大小一致



  5. plt.legend()指明要繪製圖例(見下圖的右上角)




這段代碼輸出的圖形如下所示:








pie函數的詳細說明參見這裡:

matplotlib.pyplot.pie




條形圖




bar函數用來繪製條形圖。條形圖常常用來描述一組數據的對比情況,例如:一周七天,每天的城市車流量。




下面是一個代碼示例:





# bar.py


 


import 

matplotlib

.

pyplot 

as

 

plt


import numpy 

as

 

np


 


N

 = 

7


 


x

 = 

np

.

arange

(

N

)


data

 = 

np

.

random

.

randint

(

low

=

0

,

 

high

=

100

,

 

size

=

N

)


colors

 = 

np

.

random

.

rand

(

N *

 

3

).

reshape

(

N

,

 -

1

)


labels

 = 

[

"Mon"

,

 

"Tue"

,

 

"Wed"

,

 

"Thu"

,

 

"Fri"

,

 

"Sat"

,

 

"Sun"

]


 


plt

.

title

(

"Weekday Data"

)


plt

.

bar

(

x

,

 

data

,

 

alpha

=

0.8

,

 

color

=

colors

,

 

tick_label

=

labels

)


plt

.

show

()




這段代碼說明如下:






  1. 這幅圖展示了一組包含7個隨機數值的結果,每個數值是[0, 100]的隨機數



  2. 它們的顏色也是通過隨機數生成的。np.random.rand(N * 3).reshape(N, -1)表示先生成21(N x 3)個隨機數,然後將它們組裝成7行,那麼每行就是三個數,這對應了顏色的三個組成部分。如果不理解這行代碼,請先學習一下

    Python 機器學習庫 NumPy 教程



  3. title指定了圖形的標題,labels指定了標籤,alpha是透明度




這段代碼輸出的圖形如下所示:








bar函數的詳細說明參見這裡:

matplotlib.pyplot.bar




直方圖




hist函數用來繪製直方圖。直方圖看起來是條形圖有些類似。但它們的含義是不一樣的,直方圖描述了數據中某個範圍內數據出現的頻度。這麼說有些抽象,我們通過一個代碼示例來描述就好理解了:





# hist.py


 


import 

matplotlib

.

pyplot 

as

 

plt


import numpy 

as

 

np


 


data

 = 

[

np

.

random

.

randint

(

0

,

 

n

,

 

n

)

 

for

 

n

 

in

 

[

3000

,

 

4000

,

 

5000

]]


labels

 = 

[

"3K"

,

 

"4K"

,

 

"5K"

]


bins

 = 

[

0

,

 

100

,

 

500

,

 

1000

,

 

2000

,

 

3000

,

 

4000

,

 

5000

]


 


plt

.

hist

(

data

,

 

bins

=

bins

,

 

label

=

labels

)


plt

.

legend

()


 


plt

.

show

()




上面這段代碼中,[np.random.randint(0, n, n) for n in [3000, 4000, 5000]]生成了包含了三個數組的數組,這其中:






  • 第一個數組包含了3000個隨機數,這些隨機數的範圍是 [0, 3000)



  • 第二個數組包含了4000個隨機數,這些隨機數的範圍是 [0, 4000)



  • 第三個數組包含了5000個隨機數,這些隨機數的範圍是 [0, 5000)




bins數組用來指定我們顯示的直方圖的邊界,即:[0, 100) 會有一個數據點,[100, 500)會有一個數據點,以此類推。所以最終結果一共會顯示7個數據點。同樣的,我們指定了標籤和圖例。




這段代碼的輸出如下圖所示:







在這幅圖中,我們看到,三組數據在3000以下都有數據,並且頻度是差不多的。但藍色條只有3000以下的數據,橙色條只有4000以下的數據。這與我們的隨機數組數據剛好吻合。





hist函數的詳細說明參見這裡:

matplotlib.pyplot.hist




結束語




通過本文,我們已經知道了Matplotlib的大致使用方法和幾種最基本的圖形的繪製方式。




需要說明的是,由於是入門教程,因此本文中我們只給出了這些函數和圖形最基本的使用方法。但實際上,它們的功能遠不止這麼簡單。因此本文中我們貼出了這些函數的API地址以便讀者進一步的研究。




看完本文有收穫?請轉

發分享給更多人


關注「P

ython開發者」,提升Python技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python開發者 的精彩文章:

5 種使用 Python 代碼輕鬆實現數據可視化的方法
不懂 Python,你在 AI 時代將成為新「文盲」

TAG:Python開發者 |