Python 繪圖庫 Matplotlib 入門教程

2021-01-14 Python開發者

(點擊上方公眾號,可快速關注)


來源:強波的技術博客

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()


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



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


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

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

通過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()


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



這段代碼說明如下:


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

最後一個參數是由兩個字符構成的,分別是線條的樣式和顏色。前者是紅色的直線,後者是綠色的點線。關於樣式和顏色的說明請參見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()


這段代碼說明如下:


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

參數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()


這段代碼說明如下:


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

圖中的標籤通過labels來指定

autopct指定了數值的精度格式

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

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()


這段代碼說明如下:


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

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

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地址以便讀者進一步的研究。


看完本文有收穫?請轉發分享給更多人

關注「Python開發者」,提升Python技能

相關焦點

  • 如何用matplotlib繪圖呢?
    什麼是matplotlib?使用過python做數據分析的小夥伴都知道,matplotlib是一款命令式、較底層、可定製性強、圖表資源豐富、簡單易用、出版質量級別的python 2D繪圖庫。matplotlib算是python繪圖的元老級庫,類似程式語言裡的C語言。很多其它的python繪圖庫是基於matplotlib開發的,比如seaborn、ggplot、plotnine、holoviews、basemap等。matplotlib可用於python腳本、python shell、jupyter notebook、web等。
  • 30分鐘入門 Matplotlib 繪圖
    Matplotlib是一個主要用於繪製二維圖形的Python庫。
  • matplotlib的Python數據可視化和探索——入門指南
    matplotlib——最受歡迎的Python庫,用於數據可視化和探索我喜歡在Python中使用matplotlib。這是我學會掌握的第一個可視化庫,此後一直存在。matplotlib是最受歡迎的用於數據可視化和探索的Python庫,這是有原因的——它提供的靈活性和敏捷性是無與倫比的!
  • 未明學院:Python可視化庫Matplotlib繪圖入門詳解
    Matplotlib是Python的繪圖庫,其中的pyplot包封裝了很多畫圖的函數。Matplotlib.pyplot 包含一系列類似 MATLAB 中繪圖函數的相關函數。每個 Matplotlib.pyplot 中的函數會對當前的圖像進行一些修改,例如:產生新的圖像,在圖像中產生新的繪圖區域,在繪圖區域中畫線,給繪圖加上標記,等等…… Matplotlib.pyplot 會自動記住當前的圖像和繪圖區域,因此這些函數會直接作用在當前的圖像上。
  • matplotlib繪圖的核心原理講解
    matplotlib繪圖通過上述分析,總結如下:一個figure(畫布)上,可以有多個區域axes(坐標系),我們在每個坐標系上繪圖,也就是說每個axes(坐標系)中,都有一個axis(坐標軸)。特別注意:在matplotlib中,figure畫布和axes坐標軸並不能顯示的看見,我們能夠看到的就是一個axis坐標軸的各種圖形。
  • Python數據可視化技能提升—用好matplotlib第1篇
    好啦,既然有朋友提出需要來啦,那今天咱們就聊點Python數據可視化相關的東東吧,說到Python的數據可視化呢,就必須提Python的一個庫哦,它就是大名鼎鼎的matplotlib庫,也是目前用得最多的Python數據可視化庫哦,matplotlib其實把MatLab的很多優點都借鑑了過來,所以呢,熟悉MatLab的朋友,對於matplotlib是上手很快的哦!
  • python matplotlib畫圖教程學習:使用介紹
    本篇文章介紹matplotlib包使用時,需要掌握的一些基本概念。下圖顯示了matplotlib圖形的基本構成部分,如figure(圖形)、axes(子圖形)、title(標題)、legend(圖例)、Major tick(大標尺刻度)、Minor tick(小標尺刻度)、Major tick label(大標尺刻度數值)、Minor tick label(小標尺刻度數值)、Y axis label(y軸指標說明)、X axis label(x軸指標說明)、Line
  • PyCharm安裝matplotlib教程——安裝好matplotlib但是import報錯
    輸入python -m pip install -U pip setuptools2.輸入python -m pip install matplotlib3.檢查是否已經安裝成功。輸入python -m pip list成功安裝。默認安裝在D:\Python\Lib\site-packages方式二:通過下載matplotlib進行安裝。
  • 見識matplotlib:不常見的一面,折線圖!
    眾所周知,matplotlib是python繪圖的基礎包,能夠生成各種各樣2D或者3D的圖形,用法算是多而全的那種,下邊是matplotlib官網首頁作為例子的幾張圖,大家感受一下:什麼?醜拒?不不不,別激動!其實matplotlib一直是一個低調奢華有內涵的包,需要我們透過它樸實無華的外表認清它豐富多彩的內在,來康康這條妖嬈的曲線,有沒有感受到它的召喚?
  • Python模塊NumPy,Pandas,matplotlib的中文文檔
    今天比較忙所以不能寫長文了作為一名數據工程師需要熟練掌握python中的這些numpy,matplotlib,pandas,sklearn,seaborn,statsmodel.模塊但是由於這些模塊的文檔都是英文的可能一些英文不好的同學學起來會比較的困難,所以我從網上給大家找到一些中文的文檔
  • Python數據可視化之高速繪圖神器PyQtGraph庫,強烈建議收藏
    比如最經典、使用人數最多的matplotlib庫,其有著十多年的歷史積累,可生成高質量出版級別的圖形,它幾乎已經成了事實上的Python繪圖標準庫。再比如在matplotlib庫基礎上衍生的其它繪圖庫,如seaborn、ggplot、plotnine等等,甚至還有其它的一些庫如底層使用JavaScript 實現的開源可視化庫pyecharts等,這些庫都比較容易使用,幾行代碼就可畫出來漂亮的圖形。
  • 使用Matplotlib可視化數據的5個強大技巧
    正如你在y-label中看到的,它仍然是phi(φ)的符號,但是對於某些人來說,它還不足以作為繪圖標籤。為了使它更漂亮,你可以使用Latex字體。如何使用它?答案就在這裡。plt.rcParams['text.usetex'] = Trueplt.rcParams['font.size'] = 18你可以在python代碼的開頭添加上面的代碼。
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    在網絡上看到幾位前輩寫了關於python深度學習庫的文章,對於小小白來說,因為我剛開始學python,我得承認自己看完後依然覺得雲裡霧裡的,不知道這些庫到底對我有什麼用處。所以我到網絡上搜集補充關於這些庫的說明內容,感覺在這個整理資料的過程中,對於這些python程序庫了解了更多,以下是我整理的學習筆記。
  • 掌握了這24個頂級Python庫,你就是大神!
    以下是安裝Matplotli的代碼:$ pip install matplotlib下面是使用Matplotlib構建的不同類型圖示的部分例子:柱狀圖%matplotlib inlineimport matplotlib.pyplot as pltfrom numpy.random import normal
  • 使用Python玩轉高等數學(5):三角函數
    從三角函數開始,我們使用matplotlib繪製函數圖像,matplotlib是圖形繪製庫,使用matplotlib可以方便的繪製函數圖形,以及直方圖
  • 這麼用MatPlotLib視覺化呈現數據,你值得擁有!
    Matplotlib2. Seaborn3. Plotly4. Pandas學習使用這些視覺化工具可促進數據理解、信息提取和決策制定。本文將對Matplotlib工具進行詳細介紹。MatplotlibMatplotlib是一個Python的2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環境生成出版質量級別的圖形。
  • 這幾個常用的python庫你需要知道
    python可以說是近幾年最火熱、最實用的、最容易上手的工具之一了。功能強大、應用廣泛,可以幫你搜集工作數據,還能幫你下載音樂,電影,於是就掀起了一波學習python的大潮,小編也毫不猶豫的加入了。但是對於向小編一樣的小白來說,剛開始學習還是有些困難的,需要首先了解python的一些基礎知識。所以小編就整理了一些常用的python庫,希望對正在學習python的小夥伴有所幫助。1.MatplotlibMatplotlib是一個用於創建二維圖和圖形的底層庫。
  • 如何用Python畫一手漂亮的圖表
    那就是Matplotlib!Matplotlib是Python用戶的一種此類解決方案。它是一個全面的繪圖庫,對使用Python和NumPy的人有用。在本Matplotlib教程中,我們將介紹該模塊的所有功能,包括以下主題:· 什麼是Matplotlib?
  • 超硬核的 Python 數據可視化教程!
    matplotlibpython中最基本的作圖庫就是matplotlib,是一個最基礎的Python可視化庫,一般都是從matplotlib上手Python數據可視化,然後開始做縱向與橫向拓展。Seaborn是一個基於matplotlib的高級可視化效果庫,針對的點主要是數據挖掘和機器學習中的變量特徵選取,seaborn可以用短小的代碼去繪製描述更多維度數據的可視化效果圖其他庫還包括Bokeh(是一個用於做瀏覽器端交互可視化的庫,實現分析師與數據的交互);Mapbox(處理地理數據引擎更強的可視化工具庫)等等本篇文章主要使用
  • Matplotlib+Seaborn:一文掌握Python可視化庫的兩大王者
    本教程將使用以下兩種包來演示Python的繪圖功能:· Matplotlib· SeabornMatplotlibimportmatplotlib.pyplot as plt%matplotlib inlineimport numpy as np在上面的代碼塊中,將Pyplot模塊調整為plt格式並導入Matplotliib庫。