Python 中的 Matplotlib 簡介

已發表: 2022-10-04

Matplotlib 是一個 Python 繪圖庫,機器學習專家主要使用它來創建靜態和交互式可視化。

什麼是 Matplotlib

Mathplotlib 是 John D. Hunter 於 2003 年創建的,於 2021 年 5 月 8 日發布,當前版本為 3.4.2。

這個庫主要是用 Python 編寫的,其餘的是用 C 目標和 JavaScript 編寫的,使其與平台兼容。

Matplotlib 使用 NumPy,這是一個 Python 數值擴展。 它對 NumPy 的擴展增加了它作為開源替代品的可行性,使其比 MATLAB 更受歡迎。

對於 Python GUI 應用程序,Matplotlib 允許使用它附帶的面向對象的 API 在其上繪製靜態圖。

用戶只需編寫幾行 Python 代碼即可使用不同的圖表來可視化他們的數據,包括散點圖、直方圖、條形圖、餅圖、折線圖和箱線圖。

您可以使用 Matplotlib 在 Python shell、Jupyter notebook、
Jupyter 實驗室,還使用 Pycharm 或 Anaconda 以及跨各種平台的 Flask 和 Django 等 Web 應用程序服務器。

就像在 MATLAB 中一樣,您可以根據字體、線條、顏色和样式廣泛控制繪圖。

在簡單介紹了 Python 中的 Matplotib 庫之後,讓我們看看如何在我們的系統中設置它。

設置 Matplotlib 環境

與任何其他 Python 包和庫一樣,您可以使用 pip 包管理器在所有操作系統上安裝預編譯的 Matplotlib 庫及其包。

當然,它需要您首先在系統上安裝 Python 和 pip 包。

以下命令顯示 Python 和 pip 的版本,以確認這些工具是否已安裝。

檢查是否安裝了 Python

 Python --version

檢查是否安裝了 pip

 pip -V

安裝 Mathplotlib

下面的命令從 Python 包索引 (PyPI) 安裝 Matplotlib 包。

 python -m pip install matplotlib

該命令下載並安裝 Matplotlib 的相關包。 安裝完成後,您應該會看到安裝成功的消息。

為確保 Matplotlib 已成功安裝,請鍵入以下命令,該命令將在命令提示符中顯示 Matplotlib 的版本。

 import matplotlib matplotlib.__version__

希望安裝未編譯的 Matplotlib 包的開發人員除了依賴項、設置腳本、配置文件和補丁外,還必須能夠訪問其係統中正確的編譯器。

但是,這種特殊的未編譯 Matplolib 安裝可能很複雜,尤其是對於 Matplotlib 新手用戶。 因此,為什麼不直接使用一條命令在幾秒鐘內安裝庫呢?

安裝 Matplotlib 後,將包導入您的環境以訪問其實用程序。

Matplotlib 繪圖選項

Matplotlib 提供了許多繪圖選項來可視化數據。 它還允許通過提供不同的主題、顏色和調色板選項來自定義繪圖,用戶可以使用這些選項來操作繪圖。

這些繪圖選項包括:

#1。 條形圖

條形圖,也就是著名的條形圖,是可視化同一類別中值的定量比較的合適選項。

條形圖-1

Matplotlib 使用矩形條表示此圖,其中它們的長度和高度代表它們的比例值。 條可以是水平的或垂直的。

Matplotlib 使用其plt.bar()函數來創建條形圖。

此外,您可以使用更多函數來操作此圖。 例如, plt.xlabel()plt.ylabel()函數,標記圖形的 x 和 y 軸。

plt.title()函數還允許您為繪圖指定標題,而plt.savefig()函數保存繪圖。 最重要的plot.show()函數顯示繪圖。

#2。 餅圖

您可以使用我們稱為餅圖的圓形統計圖來可視化項目在同一類別中的比例分佈。

餅圖以百分比形式顯示數據。 圖表的整個區域對應於整個數據的百分比,而各個餅圖切片代表數據百分比的各個部分。

餅形圖

Matplotlib 使用plt.pie()函數繪製和調整餅圖的參數。
更多的參數,如將餅圖值打印到小數點後 1 位的autopct ,在繪製餅圖時很有用。

商業組織發現餅圖可用於呈現相關信息,例如運營、銷售或資源。

#3。 直方圖

直方圖顯示數字數據分佈。 它使用連續間隔將數據分成不同的部分。

直方圖和條形圖之間的主要區別在於它們處理的數據類型。 直方圖處理連續數據類型,而條形圖處理分類數據。

直方圖

Matplotlib 使用hist()函數,該函數使用一組隨機或定義的值來創建直方圖。

#4。 線圖

這些圖可用於顯示我們在 X 和 Y 基礎上定義為數值和分類的兩個數據值之間的關係。

線形圖

線圖對於跟踪一段時間內數據值的變化非常重要。

#5。 散點圖

散點圖指出了關係,包括數據中變量之間的相關性。 它在識別異常值方面也很有用。

散點圖

散點圖使用點來表示數據變量的關係以及一個變量的變化如何影響另一個變量。

如何在 Matplotlib 中創建繪圖

Matplotlib 使用不同的函數來創建不同的圖。 它還使用很少的代碼行來創建繪圖。

下面我們看看如何使用 Matplotlib 中的不同函數創建不同的繪圖選項。

#1。 Matplotlib 中的條形圖

如上所述,條形圖使用表示一個軸上的類別與另一軸上的類別的相應值的比較的條形圖和軸顯示數據類別。

Matplotlib 中的bar()函數採用不同的參數佈局來描述條的佈局,如下所示。

 plt.bar(x, y, height, width, bottom, align)

x 和 y 參數表示圖中條形的 x 坐標值和 y 坐標值。 width 參數表示 bar 的寬度,而 height 參數表示 bar 的高度。

例如,讓我們表示一個名為 x 的動物收容所中的狗和貓的數量。

 import matplotlib.pyplot as plt import numpy as np x = ["Cats", "Dogs"] plt.xlabel("Cats and Dogs in Shelter") plt.ylabel("No. of animals in Shelter") plt.title("Number of cats and dogs in shelter x") y = [300, 350] plt.bar(x, y, color ='black', width = 0.5)

輸出:

條形圖
Mathplotlib 中條形圖的輸出

如上例所示,您可以使用 color 屬性進一步指定條形的顏色。 此外, plt.xlabel and p.ylabel name the x and y axes,plt.title命名繪圖。

#2。 如何創建餅圖

Matplotlib 使用pyplot模塊自帶的pie()函數繪製餅圖。
該函數表示要以數組形式繪製的數據。

句法:

 matplotlib.pyplot.pie(data, explode=None, labels=None, colors=None, autopct=None, shadow=False)

顏色參數設置餅圖的顏色。 您可以使用一組值來為每個切片指定顏色。

為了進一步包含餅圖中每個切片的詳細信息, autopct參數使用 Python 的字符串格式表示法添加每個切片表示的數字百分比。 作為參數的 explode 接受從 0.1 開始的值數組,以定義切片與餅圖中心的距離。

讓我們繪製一個餅圖,顯示為特定項目分配的資源百分比。

 import matplotlib.pyplot as plt import numpy as np y = np.array([25, 10, 45, 20]) mylabels = ["w", "x", "y", "z"] explodevalues = [0.1, 0.2, 0, 0] colors = ['tab:blue', 'tab:green', 'tab:orange', 'tab:red'] plt.title("Resources allocated for a random project") plt.pie(y, labels = mylabels, colors=colors,explode = explodevalues, autopct='%1.1f%%', shadow = True) plt.show()

輸出:

餅圖
Mathplotlib 中餅圖的輸出

上圖顯示了一個餅圖,其中四個切片分別標記為 w、x、y 和 z。 爆炸值定義切片將放置在離餅中心多遠的位置。

從上圖中,x 更遠,因為它的爆炸值大於其他值。 shadow 屬性為餅圖添加陰影,如圖所示,而autopct設置每個切片表示的整個餅圖的相對百分比。

#3。 創建直方圖

對於直方圖,我們將使用一系列區間來表示 x 軸上給定值的範圍。
另一方面,y 軸將代表頻率信息。

與其他繪圖不同,在 Matplotlib 中繪製直方圖需要一些預定義的步驟來創建繪圖。

這些步驟包括:

  1. 從您擁有的一組數據值中創建一個範圍箱。 您可以使用可以為您生成隨機值的np.random.normal()函數。
  2. 使用一系列間隔,將值分配到一系列值中。
  3. 計算每個特定間隔內的值。
  4. 現在使用matplotlib.pyplot.hist()函數來創建直方圖。

hist()函數接受幾個參數,包括:

x - 這表示數組序列

bins – 這是一個可選參數,表示可能包含整數或字符串序列的變量的非重疊區間。

range - 它定義了 bin 的上限和下限

align - 此參數控制直方圖的對齊方式。 無論是左、右還是中間。

color - 它定義了條形的顏色。

rwidth – 將直方圖中條形的相對寬度設置為 bin 的相對寬度。

log – log 參數定義直方圖軸上的對數刻度。

以下示例使用定義的值繪製直方圖。

 from matplotlib import pyplot as plt x = [22, 40, 87, 5, 43, 30, 56,73, 55, 54, 11, 20, 51, 5, 50, 60, 70, 80] plt.hist(x) plt.title(Histogram plot example') plt.xlabel('x axis') plt.ylabel('frequency') plt.show()

輸出:

顯示直方圖的圖像
Mathplotlib 中直方圖的輸出

#4。 Matplotlib 中的線圖

Matplotlib 使用其名為pyplot的子庫,它帶有各種有助於其實現的函數。

我們使用plot()函數,它是pyplot附帶的通用函數來繪製線圖和其他不同類型的線圖,包括曲線圖和多線圖。 創建這些不同類型的圖取決於您傳遞給 y 軸的值。

繪圖時,導入matplotlib.pyplot和 Numpy,繪製圖表。 plot(x,y)方法通過將隨機值傳遞給 x 和 y 參數來創建線圖。

此外,您可以傳遞一個標籤變量來標記繪圖。 title 函數進一步命名繪圖的標題,而 xlabel 和 ylabel 函數命名軸。 最後,show() 函數顯示繪圖。

例如:

 import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 5, 10) y = 3*x + 2 plt.title('Line plot example') plt.xlabel('x axis') plt.ylabel('y axis') plt.plot(x, y) plt.show()

結果:

line_plot-1
Mathplotlib 中線圖的輸出

np.linspace屬性在繪圖上返回一組在特定間隔上的 x 值的均勻間隔數字。 這將在0 and 5範圍內創建一個包含 10 個值的數組。 y 值是根據使用 x 對應值的方程創建的。

創建散點圖

Matplotlib 使用 scatter() 方法來創建這個圖。
該方法接受以下參數。

 matplotlib.pyplot.scatter(x_axis_data, y_axis_data, s=None, c=None, marker=None, cmap=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None)

x_axis_data 和 y_axis_data 參數不能留空,這與其他參數不同,這些參數可以是可選的並且其值為 None。 x_axis_data 參數定義了 x 軸的數據數組,而 y_axis_data 設置了 y 軸的數據數組。

matplotlib 中的散點圖示例

import matplotlib.pyplot as plt x =[15, 17, 18, 27, 22, 27, 32, 14, 11, 12, 29, 16] y =[19, 16, 17, 18, 10, 26, 13, 27, 14, 18, 17, 35] plt.title('Scatter plot example') plt.xlabel('x variable') plt.ylabel('y variable') plt.scatter(x, y, c ="green") # To show the plot plt.show()

它的輸出將像:

在 Matplotib 中顯示散點圖的圖像
Mathplotlib 中散點圖的輸出

matplotlib 中的 subplot() 是什麼

subplot()函數可用於在單個 Matplotlib 圖上繪製多個圖。 這允許查看和比較圖中的多個圖。

該函數將返回一個帶有三個參數的元組; 行和列分別作為第一個和第二個參數,當前繪圖的索引作為第三個參數。

行和列清楚地定義了 Matplotlib 的佈局。

因此, plt.subplot(2, 1, 1)將繪製一個兩行一列的 Matplotlib 圖,這個圖將是第一個圖。

另一方面, plt.subplot(2, 1, 2)顯示第二個圖,其中包含兩行一列。

繪製這兩個圖將在彼此之上創建它們,如下例所示。

 import matplotlib.pyplot as plt import numpy as np #plot 1: x = np.array([2, 4, 6, 8]) y = np.array([3, 6, 9, 12]) plt.subplot(2, 1, 1) plt.plot(x,y) #plot 2: x = np.array([3, 6, 9, 12]) y = np.array([1, 2, 3, 4]) plt.subplot(2, 1, 2) plt.plot(x,y) plt.show()

上述示例的輸出將如下圖所示。

使用 subplot 在彼此之上創建兩個圖

使用不同的示例,讓我們使用 subplot 函數來繪製兩個具有一行和兩列的圖形。 這將並排顯示圖。

 import matplotlib.pyplot as plt import numpy as np #plot 1: x = np.array([2, 4, 6, 8]) y = np.array([3, 6, 9, 12]) plt.subplot(1, 2, 1) plt.plot(x,y) #plot 2: x = np.array([3, 6, 9, 12]) y = np.array([1, 2, 3, 4]) plt.subplot(1, 2, 2) plt.plot(x,y) plt.show()

上面的示例將顯示以下結果。

子情節2

嗯,這是有趣的互動,你不這麼認為嗎?

最後的話

Matplotlib 是 Python 中一個著名的可視化庫。 它的交互性和易用性即使對於初學者也是如此,使其成為在 Python 中進行繪圖的更好工具。

本文介紹了 Matplotlib 附帶的函數可以創建的各種圖的示例,包括餅圖、條形圖、直方圖和散點圖。

當然,Python 還有其他幾個庫可供機器學習專家和數據科學家用來創建可視化。

您可以探索更多可以使用 Matplotlib 創建的繪圖,以及您將使用哪些函數來創建繪圖。

快樂的陰謀!