日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

快速入门Matplotlib

發(fā)布時(shí)間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速入门Matplotlib 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下是原文正文:


數(shù)據(jù)的處理、分析和可視化已經(jīng)成為 Python 近年來最重要的應(yīng)用之一。這種現(xiàn)象又進(jìn)一步引出“大數(shù)據(jù)”分析等類似的話題,而大數(shù)據(jù)分析在人們所能預(yù)見的諸多領(lǐng)域內(nèi)都有廣泛應(yīng)用,這其中就包含筆者個(gè)人感興趣的機(jī)器學(xué)習(xí)。

Python 在處理數(shù)據(jù)、分析數(shù)據(jù)以及數(shù)據(jù)可視化方面擁有很多功能強(qiáng)大的工具,這也是 Python 在科學(xué)領(lǐng)域中能夠迅速發(fā)展的一個(gè)主要原因。

在接下來的一系列文章中,我們將介紹 Python 科學(xué)計(jì)算中涉及的主要的庫,并且學(xué)習(xí)如何使用它們處理數(shù)據(jù)以滿足我們的需求。但是我們并非只是停留在快速寫出模板代碼來使用這些庫的層面上,我們還會(huì)了解這些庫背后的數(shù)學(xué)知識(shí),以幫助我們更好地理解庫的運(yùn)行原理。

首先,我們將從一個(gè)功能非常強(qiáng)大的庫 Matplotlib 開始介紹,在后面的文章中也會(huì)一直用到這個(gè)庫。

什么是 Matplotlib?

簡單來說,Matplotlib 是 Python 的一個(gè)繪圖庫。它包含了大量的工具,你可以使用這些工具創(chuàng)建各種圖形,包括簡單的散點(diǎn)圖,正弦曲線,甚至是三維圖形。Python 科學(xué)計(jì)算社區(qū)經(jīng)常使用它完成數(shù)據(jù)可視化的工作。

你可以在他們的網(wǎng)站上了解到更多 Matplotlib 背后的設(shè)計(jì)思想,但是我強(qiáng)烈建議你先瀏覽一下他們的圖庫,體會(huì)一下這個(gè)庫的各種神奇功能。

畫一個(gè)簡單的圖形

首先我們要畫一條在 [0, 2pi] 上的正弦曲線。讀者應(yīng)該會(huì)注意到我們?cè)谶@里使用了 Numpy 庫,但是即便你沒有使用過這個(gè)庫也不用擔(dān)心,在后面的文章中我們也會(huì)介紹到 Numpy 庫。

import matplotlib.pyplot as plt import numpy as np

以上這些就是我們將要用到的導(dǎo)入模塊。在我的上一篇文章(以及另一篇文章)中都提到過?from x import *?是一種糟糕的導(dǎo)入方式。我們不想在程序里重復(fù)書寫?matplotlib.pyplot?和?numpy,這種書寫方式過于冗長,因此我們采用了上面的折中寫法。

# 簡單的繪圖 x = np.linspace(0, 2 * np.pi, 50) plt.plot(x, np.sin(x)) # 如果沒有第一個(gè)參數(shù) x,圖形的 x 坐標(biāo)默認(rèn)為數(shù)組的索引 plt.show() # 顯示圖形

上面的代碼將畫出一個(gè)簡單的正弦曲線。np.linspace(0, 2 * np.pi, 50)?這段代碼將會(huì)生成一個(gè)包含 50 個(gè)元素的數(shù)組,這 50 個(gè)元素均勻的分布在 [0, 2pi] 的區(qū)間上。

plot?命令以一種簡潔優(yōu)雅的方式創(chuàng)建了圖形。提醒一下,如果沒有第一個(gè)參數(shù) x,圖形的 x 軸坐標(biāo)將不再是 0 到 2pi,而應(yīng)該是數(shù)組的索引范圍。

最后一行代碼?`plt.show()?將圖形顯示出來,如果沒有這行代碼圖像就不會(huì)顯示。

運(yùn)行代碼后應(yīng)該會(huì)類似得到下面的圖形:

在一張圖上繪制兩個(gè)數(shù)據(jù)集

大多數(shù)時(shí)候讀者可能更想在一張圖上繪制多個(gè)數(shù)據(jù)集。用 Matplotlib 也可以輕松實(shí)現(xiàn)這一點(diǎn)。

x = np.linspace(0, 2 * np.pi, 50) plt.plot(x, np.sin(x),x, np.sin(2 * x)) plt.show()

上面的代碼同時(shí)繪制了表示函數(shù) sin(x) 和 sin(2x) 的圖形。這段代碼和前面繪制一個(gè)數(shù)據(jù)集的代碼幾乎完全相同,只有一點(diǎn)例外,這段代碼在調(diào)用?plt.plot()?的時(shí)候多傳入了一個(gè)數(shù)據(jù)集,并用逗號(hào)與第一個(gè)數(shù)據(jù)集分隔開。

最后你會(huì)得到類似于下面包含兩條曲線的圖形:

自定義圖形的外觀

當(dāng)在同一個(gè)圖形上展示多個(gè)數(shù)據(jù)集時(shí),通過改變線條的外觀來區(qū)分不同的數(shù)據(jù)集變得非常必要。

# 自定義曲線的外觀 x = np.linspace(0, 2 * np.pi, 50) plt.plot(x, np.sin(x), 'r-o',x, np.cos(x), 'g--') plt.show()

上述代碼展示了兩種不同的曲線樣式:'r-o'?和?'g--'。字母 'r' 和 'g' 代表線條的顏色,后面的符號(hào)代表線和點(diǎn)標(biāo)記的類型。例如?'-o'?代表包含實(shí)心點(diǎn)標(biāo)記的實(shí)線,'--'?代表虛線。其他的參數(shù)需要讀者自己去嘗試,這也是學(xué)習(xí) Matplotlib 最好的方式。

顏色: 藍(lán)色 - 'b' 綠色 - 'g' 紅色 - 'r' 青色 - 'c' 品紅 - 'm' 黃色 - 'y' 黑色 - 'k'('b'代表藍(lán)色,所以這里用黑色的最后一個(gè)字母) 白色 - 'w'

?

線: 直線 - '-' 虛線 - '--' 點(diǎn)線 - ':' 點(diǎn)劃線 - '-.'

?

常用點(diǎn)標(biāo)記 點(diǎn) - '.' 像素 - ',' 圓 - 'o' 方形 - 's' 三角形 - '^' 更多點(diǎn)標(biāo)記樣式點(diǎn)擊這里

最后你會(huì)得到類似下面的圖形:

使用子圖

使用子圖可以在一個(gè)窗口繪制多張圖。

# 使用子圖 x = np.linspace(0, 2 * np.pi, 50) plt.subplot(2, 1, 1) # (行,列,活躍區(qū)) plt.plot(x, np.sin(x), 'r') plt.subplot(2, 1, 2) plt.plot(x, np.cos(x), 'g') plt.show()

使用子圖只需要一個(gè)額外的步驟,就可以像前面的例子一樣繪制數(shù)據(jù)集。即在調(diào)用?plot()?函數(shù)之前需要先調(diào)用?subplot()?函數(shù)。該函數(shù)的第一個(gè)參數(shù)代表子圖的總行數(shù),第二個(gè)參數(shù)代表子圖的總列數(shù),第三個(gè)參數(shù)代表活躍區(qū)域。

活躍區(qū)域代表當(dāng)前子圖所在繪圖區(qū)域,繪圖區(qū)域是按從左至右,從上至下的順序編號(hào)。例如在 4×4 的方格上,活躍區(qū)域 6 在方格上的坐標(biāo)為 (2, 2)。

最終你會(huì)得到類似下面的圖形:

簡單的散點(diǎn)圖

散點(diǎn)圖是一堆離散點(diǎn)的集合。用 Matplotlib 畫散點(diǎn)圖也同樣非常簡單。

# 簡單的散點(diǎn)圖 x = np.linspace(0, 2 * np.pi, 50) y = np.sin(x) plt.scatter(x,y) plt.show()

正如上面代碼所示,你只需要調(diào)用?scatter()?函數(shù)并傳入兩個(gè)分別代表 x 坐標(biāo)和 y 坐標(biāo)的數(shù)組。注意,我們通過?plot?命令并將線的樣式設(shè)置為?'bo'?也可以實(shí)現(xiàn)同樣的效果。

最后你會(huì)得到類似下面的無線圖形:

彩色映射散點(diǎn)圖

另一種你可能用到的圖形是彩色映射散點(diǎn)圖。這里我們會(huì)根據(jù)數(shù)據(jù)的大小給每個(gè)點(diǎn)賦予不同的顏色和大小,并在圖中添加一個(gè)顏色欄。

# 彩色映射散點(diǎn)圖 x = np.random.rand(1000) y = np.random.rand(1000) size = np.random.rand(1000) * 50 colour = np.random.rand(1000) plt.scatter(x, y, size, colour) plt.colorbar() plt.show()

上面的代碼大量的用到了?np.random.rand(1000),原因是我們繪圖的數(shù)據(jù)都是隨機(jī)產(chǎn)生的。

同前面一樣我們用到了?scatter()?函數(shù),但是這次我們傳入了另外的兩個(gè)參數(shù),分別為所繪點(diǎn)的大小和顏色。通過這種方式使得圖上點(diǎn)的大小和顏色根據(jù)數(shù)據(jù)的大小產(chǎn)生變化。

然后我們用?colorbar()?函數(shù)添加了一個(gè)顏色欄。

最后你會(huì)得到類似于下面的彩色散點(diǎn)圖:

直方圖

直方圖是另一種常見的圖形,也可以通過幾行代碼創(chuàng)建出來。

# 直方圖 x = np.random.randn(1000) plt.hist(x, 50,color='purple',histtype="bar",rwidth=0.5)#rwidth 可以調(diào)控柱狀圖之間的間距。 plt.show()

直方圖是 Matplotlib 中最簡單的圖形之一。你只需要給?hist()?函數(shù)傳入一個(gè)包含數(shù)據(jù)的數(shù)組。第二個(gè)參數(shù)代表數(shù)據(jù)容器的個(gè)數(shù)。數(shù)據(jù)容器代表不同的值的間隔,并用來包含我們的數(shù)據(jù)。數(shù)據(jù)容器越多,圖形上的數(shù)據(jù)條就越多。

最終你會(huì)得到類似下面的直方圖:

標(biāo)題,標(biāo)簽和圖例

當(dāng)需要快速創(chuàng)建圖形時(shí),你可能不需要為圖形添加標(biāo)簽。但是當(dāng)構(gòu)建需要展示的圖形時(shí),你就需要添加標(biāo)題,標(biāo)簽和圖例。

# 添加標(biāo)題,坐標(biāo)軸標(biāo)記和圖例 x = np.linspace(0, 2 * np.pi, 50) plt.plot(x, np.sin(x), 'r-x', label='Sin(x)') plt.plot(x, np.cos(x), 'g-^', label='Cos(x)') plt.legend() # 展示圖例 plt.xlabel('Rads') # 給 x 軸添加標(biāo)簽 plt.ylabel('Amplitude') # 給 y 軸添加標(biāo)簽 plt.title('Sin and Cos Waves') # 添加圖形標(biāo)題 plt.show()

為了給圖形添加圖例,我們需要在?plot()?函數(shù)中添加命名參數(shù)?'label'?并賦予該參數(shù)相應(yīng)的標(biāo)簽。然后調(diào)用?legend()?函數(shù)就會(huì)在我們的圖形中添加圖例。

接下來我們只需要調(diào)用函數(shù)?title(),xlabel()?和?ylabel()?就可以為圖形添加標(biāo)題和標(biāo)簽。

你會(huì)得到類似于下面這張擁有標(biāo)題、標(biāo)簽和圖例的圖形:

以上內(nèi)容應(yīng)該足夠幫助讀者開始使用 Matplotlib 和 Python 實(shí)現(xiàn)數(shù)據(jù)可視化,但是這些內(nèi)容并不全面。我強(qiáng)烈建議讀者親自嘗試使用這個(gè)工具,筆者也是通過這種方式掌握了這個(gè)工具。畫一些圖形,改變樣式并使用子圖功能,然后你就會(huì)很快掌握 Matplotlib 的使用方式。

這是一篇是關(guān)于如何使用 Matplotlib 和 Python 完成數(shù)據(jù)可視化的文章,也是 Python 科學(xué)計(jì)算系列文章中的第一篇。我希望讀者能從中有所收獲,并且對(duì) Matplotlib 庫更加熟悉。

總結(jié)

以上是生活随笔為你收集整理的快速入门Matplotlib的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。