溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在Python中使用Matplotlib繪圖庫

發(fā)布時(shí)間:2021-04-30 16:39:55 來源:億速云 閱讀:170 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)怎么在Python中使用Matplotlib繪圖庫,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

python可以做什么

Python是一種編程語言,內(nèi)置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強(qiáng)大,在許多領(lǐng)域中都有廣泛的應(yīng)用,例如最熱門的大數(shù)據(jù)分析,人工智能,Web開發(fā)等。

具體方法如下:

sudo pip3 install matplotlib

本文中的源碼和測(cè)試數(shù)據(jù)可以在這里獲?。簃atplotlib_tutorial

本文的代碼示例會(huì)用到另外一個(gè)Python庫:NumPy。建議讀者先對(duì)NumPy有一定的熟悉,我之前也寫過一個(gè)NumPy的基礎(chǔ)教程,參見這里:Python 機(jī)器學(xué)習(xí)庫 NumPy 教程。

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

  • 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應(yīng)用服務(wù)器

  • 用戶圖形界面工具包

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

入門代碼示例

下面我們先看一個(gè)最簡(jiǎn)單的代碼示例,讓我們感受一下Matplotlib是什么樣的:

# test.py
import matplotlib.pyplot as plt
import numpy as np
data = np.arange(100, 201)
plt.plot(data)
plt.show()

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

怎么在Python中使用Matplotlib繪圖庫

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

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

  • 通過matplotlib.pyplot將其繪制出來。很顯然,繪制出來的值對(duì)應(yīng)了圖中的縱坐標(biāo)(y軸)。而matplotlib本身為我們?cè)O(shè)置了圖形的橫坐標(biāo)(x軸):[0, 100],因?yàn)槲覀儎偤糜?00個(gè)數(shù)值

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

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

python3 test.py

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

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

一次繪制多個(gè)圖形

有些時(shí)候,我們可能希望一次繪制多個(gè)圖形,例如:兩組數(shù)據(jù)的對(duì)比,或者一組數(shù)據(jù)的不同展示方式等。

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

多個(gè)figure

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

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

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

怎么在Python中使用Matplotlib繪圖庫

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

多個(gè)subplot

有些情況下,我們是希望在同一個(gè)窗口顯示多個(gè)圖形。此時(shí)就這可以用多個(gè)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函數(shù)之外都是我們熟悉的內(nèi)容。subplot函數(shù)的前兩個(gè)參數(shù)指定了subplot數(shù)量,即:它們是以矩陣的形式來分割當(dāng)前圖形,兩個(gè)整數(shù)分別指定了矩陣的行數(shù)和列數(shù)。而第三個(gè)參數(shù)是指矩陣中的索引。

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

plt.subplot(2, 1, 1)

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

plt.subplot(2, 1, 2)

所以這段代碼的結(jié)果是這個(gè)樣子:

怎么在Python中使用Matplotlib繪圖庫

subplot函數(shù)的參數(shù)不僅僅支持上面這種形式,還可以將三個(gè)整數(shù)(10之內(nèi)的)合并一個(gè)整數(shù)。例如:2, 1, 1可以寫成2112, 1, 2可以寫成212。

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

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函數(shù)的詳細(xì)說明參見這里:matplotlib.pyplot.subplot

常用圖形示例

Matplotlib可以生成非常多的圖形式樣,多到令人驚嘆的地步。大家可以在這里:Matplotlib Gallery 感受一下。

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

線性圖

前面的例子中,線性圖的橫軸的點(diǎn)都是自動(dòng)生成的,而我們很可能希望主動(dòng)設(shè)置它。另外,線條我們可能也希望對(duì)其進(jìn)行定制??匆幌孪旅孢@個(gè)例子:

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

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

怎么在Python中使用Matplotlib繪圖庫

這段代碼說明如下:

plot函數(shù)的第一個(gè)數(shù)組是橫軸的值,第二個(gè)數(shù)組是縱軸的值,所以它們一個(gè)是直線,一個(gè)是折線; 最后一個(gè)參數(shù)是由兩個(gè)字符構(gòu)成的,分別是線條的樣式和顏色。前者是紅色的直線,后者是綠色的點(diǎn)線。關(guān)于樣式和顏色的說明請(qǐng)參見plot函數(shù)的API Doc:matplotlib.pyplot.plot

散點(diǎn)圖

scatter函數(shù)用來繪制散點(diǎn)圖。同樣,這個(gè)函數(shù)也需要兩組配對(duì)的數(shù)據(jù)指定x和y軸的坐標(biāo)。下面是一段代碼示例:

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

這段代碼說明如下:

這幅圖包含了三組數(shù)據(jù),每組數(shù)據(jù)都包含了20個(gè)隨機(jī)坐標(biāo)的位置 參數(shù)c表示點(diǎn)的顏色,s是點(diǎn)的大小,alpha是透明度

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

怎么在Python中使用Matplotlib繪圖庫

scatter函數(shù)的詳細(xì)說明參見這里:matplotlib.pyplot.scatter

餅狀圖

pie函數(shù)用來繪制餅狀圖。餅狀圖通常用來表達(dá)集合中各個(gè)部分的百分比。

# 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個(gè)數(shù)據(jù)的隨機(jī)數(shù)值 圖中的標(biāo)簽通過labels來指定 autopct指定了數(shù)值的精度格式 plt.axis('equal')設(shè)置了坐標(biāo)軸大小一致 plt.legend()指明要繪制圖例(見下圖的右上角)

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

怎么在Python中使用Matplotlib繪圖庫

pie函數(shù)的詳細(xì)說明參見這里:matplotlib.pyplot.pie

條形圖

bar函數(shù)用來繪制條形圖。條形圖常常用來描述一組數(shù)據(jù)的對(duì)比情況,例如:一周七天,每天的城市車流量。

下面是一個(gè)代碼示例:

# 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個(gè)隨機(jī)數(shù)值的結(jié)果,每個(gè)數(shù)值是[0, 100]的隨機(jī)數(shù) 它們的顏色也是通過隨機(jī)數(shù)生成的。np.random.rand(N * 3).reshape(N, -1)表示先生成21(N x 3)個(gè)隨機(jī)數(shù),然后將它們組裝成7行,那么每行就是三個(gè)數(shù),這對(duì)應(yīng)了顏色的三個(gè)組成部分。如果不理解這行代碼,請(qǐng)先學(xué)習(xí)一下Python 機(jī)器學(xué)習(xí)庫 NumPy 教程 title指定了圖形的標(biāo)題,labels指定了標(biāo)簽,alpha是透明度

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

怎么在Python中使用Matplotlib繪圖庫

bar函數(shù)的詳細(xì)說明參見這里:matplotlib.pyplot.bar

直方圖

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

# 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]]生成了包含了三個(gè)數(shù)組的數(shù)組,這其中:

第一個(gè)數(shù)組包含了3000個(gè)隨機(jī)數(shù),這些隨機(jī)數(shù)的范圍是 [0, 3000) 第二個(gè)數(shù)組包含了4000個(gè)隨機(jī)數(shù),這些隨機(jī)數(shù)的范圍是 [0, 4000) 第三個(gè)數(shù)組包含了5000個(gè)隨機(jī)數(shù),這些隨機(jī)數(shù)的范圍是 [0, 5000)

bins數(shù)組用來指定我們顯示的直方圖的邊界,即:[0, 100) 會(huì)有一個(gè)數(shù)據(jù)點(diǎn),[100, 500)會(huì)有一個(gè)數(shù)據(jù)點(diǎn),以此類推。所以最終結(jié)果一共會(huì)顯示7個(gè)數(shù)據(jù)點(diǎn)。同樣的,我們指定了標(biāo)簽和圖例。

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

怎么在Python中使用Matplotlib繪圖庫

關(guān)于怎么在Python中使用Matplotlib繪圖庫就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI