亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python 繪圖庫 Matplotlib 入門教程

 更新時間:2018年04月19日 09:50:14   作者:只為那傳說中美麗的草原  
Matplotlib是一個Python語言的2D繪圖庫,它支持各種平臺,并且功能強大,能夠輕易繪制出各種專業(yè)的圖像。本文是對Python 繪圖庫 Matplotlib 入門教程,感興趣的朋友跟隨腳本之家小編一起學習吧

運行環(huán)境

由于這是一個Python語言的軟件包,因此需要你的機器上首先安裝好Python語言的環(huán)境。關于這一點,請自行在網絡上搜索獲取方法。

關于如何安裝Matplotlib請參見這里:Matplotlib Installing。

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

sudo pip3 install matplotlib

本文中的源碼和測試數據可以在這里獲?。?a rel="external nofollow" >matplotlib_tutorial

本文的代碼示例會用到另外一個Python庫:NumPy。建議讀者先對NumPy有一定的熟悉,我之前也寫過一個NumPy的基礎教程,參見這里:Python 機器學習庫 NumPy 教程。

本文的代碼在如下環(huán)境中測試:

  • Apple OS X 10.13
  • Python 3.6.3 matplotlib 2.1.1
  • numpy 1.13.3

介紹

Matplotlib適用于各種環(huán)境,包括:

  • Python腳本
  • IPython shell Jupyter notebook
  • Web應用服務器
  • 用戶圖形界面工具包

使用Matplotlib,能夠的輕易生成各種類型的圖像,例如:直方圖,波譜圖,條形圖,散點圖等。并且,可以非常輕松的實現(xiàn)定制。

入門代碼示例

下面我們先看一個最簡單的代碼示例,讓我們感受一下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()將這個圖形顯示出來

這段代碼非常的簡單,運行起來也是一樣。如果你已經有了本文的運行環(huán)境,將上面的代碼保存到一個文本文件中(或者通過Github獲取本文的源碼),然后通過下面的命令就可以在你自己的電腦上看到上面的圖形了:

python3 test.py

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

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

一次繪制多個圖形

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

可以通過下面的方法創(chuàng)建多個圖形:

多個figure

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

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

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

注:初始狀態(tài)這兩個窗口是完全重合的。

多個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函數用來繪制直方圖。直方圖看起來是條形圖有些類似。但它們的含義是不一樣的,直方圖描述了數據中某個范圍內數據出現(xiàn)的頻度。這么說有些抽象,我們通過一個代碼示例來描述就好理解了:

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

相關文章

  • VSCode格式化Python文件的方法

    VSCode格式化Python文件的方法

    這篇文章主要介紹了VSCode格式化Python文件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • 詳解Python中三元運算符的使用

    詳解Python中三元運算符的使用

    條件表達式(有時稱為“三元運算符”)在所有Python操作中優(yōu)先級最低,三元運算符根據條件為真或假來計算某些東西,下面就跟隨小編一起來看看Python中三元運算符的具體使用吧
    2023-09-09
  • Python使用pydub庫對mp3與wav格式進行互轉的方法

    Python使用pydub庫對mp3與wav格式進行互轉的方法

    今天小編就為大家分享一篇Python使用pydub庫對mp3與wav格式進行互轉的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python對圖片進行resize、裁剪、旋轉、翻轉問題

    Python對圖片進行resize、裁剪、旋轉、翻轉問題

    這篇文章主要介紹了Python對圖片進行resize、裁剪、旋轉、翻轉問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 利用Python實現(xiàn)在同一網絡中的本地文件共享方法

    利用Python實現(xiàn)在同一網絡中的本地文件共享方法

    今天小編就為大家分享一篇利用Python實現(xiàn)在同一網絡中的本地文件共享方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python調用golang代碼詳解

    Python調用golang代碼詳解

    這篇文章主要給大家介紹了關于Python調用golang代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • 使用Python進行防病毒免殺解析

    使用Python進行防病毒免殺解析

    這篇文章主要介紹了使用Python進行防病毒免殺,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • python中元組創(chuàng)建、索引訪問和元組作用詳解

    python中元組創(chuàng)建、索引訪問和元組作用詳解

    在Python中,元組是一種內置的不可變序列,使用圓括號定義,元組的創(chuàng)建可以通過直接使用圓括號或者逗號分隔的方式進行,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-11-11
  • python 快速把超大txt文件轉存為csv的實例

    python 快速把超大txt文件轉存為csv的實例

    今天小編就為大家分享一篇python 快速把超大txt文件轉存為csv的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 讀取json格式為DataFrame(可轉為.csv)的實例講解

    讀取json格式為DataFrame(可轉為.csv)的實例講解

    今天小編就為大家分享一篇讀取json格式為DataFrame(可轉為.csv)的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論