數據可視化已經成為了現代數據科學家和工程師的重要工作之一。Matplotlib是一個優秀的數據可視化庫,它支持眾多的繪圖類型,包括線圖,散點圖,柱狀圖,等高線圖,和複雜的3D圖形。Matplotlib庫的設計目標是兼容MATLAB語法,這使得它成為科學計算中最受歡迎的繪圖庫之一。
一、基礎繪圖
Matplotlib最基礎的繪圖是線圖。下面的代碼演示如何使用Matplotlib繪製線圖。
import numpy as np
import matplotlib.pyplot as plt
# 生成數據
x = np.linspace(0, 10, 1000)
y = np.sin(x)
# 繪圖
plt.plot(x, y, label='sin(x)')
# 顯示標籤
plt.legend()
# 顯示圖形
plt.show()
下面是代碼的說明:
首先,我們從numpy庫導入linspace函數和sin函數,用來生成X軸和Y軸的數據。然後,我們從matplotlib.pyplot庫導入pyplot模塊,用來繪製圖形。接下來,使用plot函數繪製線圖。plot函數的第一個參數是X軸數據,第二個參數是Y軸數據。label='sin(x)'
表示為圖像標註注釋。如果有多個曲線需要繪畫,則使用subplot函數,其中第一個參數為nrows,第二個參數為ncols,第三個參數為plot_number,表示在其中的哪一個窗口中進行繪圖。
此外,使用legend函數可以顯示圖例。最後,使用show函數顯示圖形。運行這個程序,就會看到一幅含有一個正弦函數的線圖。
二、2D圖形和子圖
除了線圖,Matplotlib還支持各種2D圖形。在Matplotlib中,使用subplot函數可以繪製多個子圖。
x = np.linspace(-10, 10, 1000)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# 在一張圖中繪製三個子圖
plt.subplot(3, 1, 1)
plt.plot(x, y1)
plt.title('sin(x)')
plt.subplot(3, 1, 2)
plt.plot(x, y2)
plt.title('cos(x)')
plt.subplot(3, 1, 3)
plt.plot(x, y3)
plt.title('tan(x)')
plt.show()
上面的代碼中,我們生成三個不同的曲線,並使用subplot函數生成了一個顯示三個子圖的繪圖窗口。subplot函數的第一個參數是行數,第二個參數是列數,第三個參數是子圖的位置。運行此代碼,可以得到如下圖像:

三、散點圖與直方圖
另一個流行的二維圖形類型是散點圖。散點圖可以用於表示兩個變量之間的相關性。Matplotlib的scatter函數可以用於繪製散點圖。
# 構造數據
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x, y, c='r', alpha=0.5)
plt.show()
上面的代碼使用了Matplotlib的scatter函數繪製散點圖。其中x和y都是由隨機值填充的向量。color參數設置點的顏色,alpha參數設置透明度。運行此代碼,可以得到如下的散點圖:

另外,直方圖是最適合描述一組連續性數據的圖形。Matplotlib的hist函數可以用於繪製直方圖。
# 構造數據
x = np.random.randn(1000)
# 繪圖
plt.hist(x, bins=50, color='g')
plt.show()
在上面的代碼中,我們使用hist函數繪製直方圖。其中,bins參數指定直方圖的梯形數量,顏色是可以變化的。該代碼將生成如下的直方圖。

四、3D圖形
除了2D圖形,Matplotlib庫還支持各種3D圖形。我們可以使用Axes3D對象來繪製立體圖形。下面的代碼演示如何使用Matplotlib繪製3D散點圖。
from mpl_toolkits.mplot3d import Axes3D
# 生成3D數據
x = np.random.randn(100)
y = np.random.randn(100)
z = np.random.randn(100)
# 繪圖
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c='b', marker='o')
plt.show()
在上面的代碼中,我們使用Axes3D對象創建3D圖形,scatter函數用於繪製散點。marker參數指定點的形狀,顏色也可以變化。該代碼將生成如下的3D散點圖。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/184562.html