?Matplotlib
?在很多人眼里是無敵的存在,而且可以說是無敵的存在。
走過數據科學的路,路上必然有Matplotlib
?的風景在你周圍。
如果同一個項目,你的用了matplotlib 不僅有基本圖形、定制化圖形、多個坐標軸、3D繪圖,還有動態交互繪圖、繪制地圖、繪制統計圖表,甚至還有地圖分布!那么誰的更吸引人呢?收藏備用,一定用的上!
Matplotlib
是一個功能強大且廣泛使用的數據可視化工具,特別適用于科學計算、數據分析和數據科學領域。
下面是關于 Matplotlib 的一些主要特點和組成部分的介紹:
1、圖表類型:包括折線圖、散點圖、柱狀圖、餅圖、等高線圖、熱圖、直方圖等。這使得使用者可以根據不同的數據和需求創建不同類型的可視化圖表。
2、簡單易用:Matplotlib 設計簡單,容易上手。用戶可以使用它的基礎功能來創建簡單的圖表,同時也可以通過自定義配置和調整來創建高度定制化的圖表。
3、面向對象的接口:Matplotlib 提供了一個面向對象的接口,允許用戶以程序化的方式創建和修改圖表。這種接口的優點是可以更靈活地控制圖表的各個組成部分,如軸、標簽、標題等。
4、多種輸出格式:Matplotlib 支持將圖表以多種格式保存,包括圖像文件(如PNG、JPEG、SVG等)和交互式圖表,使用戶能夠在不同的場景中分享和使用圖表。
5、擴展性:Matplotlib 可以通過各種插件和擴展庫進行擴展,以滿足更高級的數據可視化需求。例如,Seaborn、Pandas 和 Plotly 都是建立在 Matplotlib 基礎之上的庫。
6、跨平臺:Matplotlib 可以在多個操作系統上運行,包括 Windows、Linux 和 macOS,因此適用于各種開發環境。
本文將從繪制基本圖形、定制化圖形、多個坐標軸、3D繪圖、動態交互繪圖、繪制地圖、繪制統計圖表等等方面進行全方位介紹!
大家伙如果覺得還不錯!可以點贊、收藏支持一下謝謝。
目錄
1、繪制基本圖形
2、定制化圖形
3、支持多個坐標軸
4、3D繪圖
5、動態交互繪圖
6、繪制地圖
7、繪制統計圖表
最后
1、繪制基本圖形
Matplotlib 可以繪制許多基本的圖形,包括但不限于以下類型:
-
折線圖(Line Plot):用于顯示數據隨時間或其他連續變量的變化趨勢。
-
散點圖(Scatter Plot):用于展示兩個變量之間的關系,通常用于觀察數據的分布和離群點。
-
柱狀圖(Bar Plot):用于比較不同類別的數據,通常用于展示離散數據的分布。
-
餅圖(Pie Chart):用于表示數據的相對部分,展示各部分在整體中的比例。
-
直方圖(Histogram):用于展示數據的分布情況,特別適用于連續數據的分布分析。
-
箱線圖(Box Plot):用于顯示數據的統計信息,包括中位數、上下四分位數和離群值等。
-
等高線圖(Contour Plot):用于可視化二維數據集中的等高線,通常在地理信息系統和物理學領域中使用。
-
熱圖(Heatmap):用于顯示數據的熱度或相關性,通常以顏色編碼方式表示數值。
下面演示一個直方圖:
import numpy as np
import matplotlib.pyplot as plt# 生成大數據量(隨機生成)
data = np.random.randn(100000)# 配置圖形和顏色
plt.figure(figsize=(10, 6)) # 設置圖形大小
plt.hist(data, bins=50, color='skyblue', edgecolor='black') # 繪制直方圖
plt.title('Histogram of Large Data') # 設置標題
plt.xlabel('Value') # 設置X軸標簽
plt.ylabel('Frequency') # 設置Y軸標簽# 顯示圖形
plt.show()
上述代碼創建了一個直方圖,包括以下特點:
-
使用?
np.random.randn
?生成了大量隨機數據,模擬了大數據量。 -
通過?
plt.figure
?來設置圖形的大小。 -
使用?
plt.hist
?創建直方圖,配置了顏色為天藍色 ('skyblue'
),邊緣顏色為黑色 ('black'
),并設置了數據分組的數量 (bins
)。 -
添加了標題、X軸標簽和Y軸標簽。
-
最后,通過?
plt.show()
?顯示圖形。
實際情況中,可以根據需要自定義圖形的顏色、樣式、標簽等屬性,以滿足具體的可視化需求。
2、定制化圖形
Matplotlib 提供了豐富的選項來自定義圖形,包括顏色、線型、標簽、標題和圖例等。
下面演示如何使用 Matplotlib 定制化一個圖形,分別單獨調整這些屬性。
我們繪制一個簡單的折線圖,并對其進行定制化:
import numpy as np
import matplotlib.pyplot as plt# 創建數據
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)# 創建圖形
plt.figure(figsize=(10, 6)) # 設置圖形大小# 繪制兩個曲線,分別定制化顏色、線型、標簽
plt.plot(x, y1, color='blue', linestyle='-', linewidth=2, label='Sine Wave')
plt.plot(x, y2, color='red', linestyle='--', linewidth=2, label='Cosine Wave')# 設置標題和坐標軸標簽
plt.title('Customized Sine and Cosine Waves')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')# 添加圖例,并設置位置、標題
plt.legend(loc='upper right', title='Legend')
plt.grid(True) # 添加網格線# 注釋一些特殊點
plt.annotate('Peak', xy=(np.pi / 2, 1), xytext=(np.pi / 2, 1.5),arrowprops=dict(facecolor='black', shrink=0.05),)
plt.annotate('Trough', xy=(3 * np.pi / 2, -1), xytext=(3 * np.pi / 2, -1.5),arrowprops=dict(facecolor='black', shrink=0.05),)# 設置坐標軸范圍
plt.xlim(0, 2 * np.pi)
plt.ylim(-2, 2)# 顯示圖形
plt.show()
上述代碼創建了一個折線圖:
-
color='blue'
:設置折線的顏色為藍色。 -
linestyle='--'
:設置折線的線型為虛線。 -
linewidth=2
:設置折線的寬度為2。 -
label='Sine Wave'
:設置圖例的標簽為"Sine Wave"。 -
plt.title
、plt.xlabel
、plt.ylabel
?分別用于設置標題、X軸標簽和Y軸標簽。 -
plt.legend(loc='upper right')
:添加圖例并指定位置為右上角。
通過類似的方式,可以進一步定制化其他類型的圖形,例如散點圖、柱狀圖等,并根據需求調整顏色、線型、標簽、標題和圖例等屬性。
Matplotlib 提供了豐富的選項,完全可以滿足各種數據可視化需求。
3、支持多個坐標軸
Matplotlib
是一個強大的Python數據可視化庫,允許在同一個圖中使用多個坐標軸,創建更加靈活和豐富的圖形。
下面的示例中,創建一個包含主軸和次軸的復雜圖形,展示Matplotlib
中多個坐標軸的使用方法。
這個示例圖形將包括一條正弦曲線和一條余弦曲線,它們使用不同的刻度和坐標軸。
import matplotlib.pyplot as plt
import numpy as np# 創建新的圖形和主要坐標軸
fig, ax1 = plt.subplots()# 設置主要坐標軸的標簽和標題
ax1.set_xlabel('X-axis')
ax1.set_ylabel('Primary Axis - Sine Curve', color='tab:blue')# 生成X軸數據
x = np.linspace(0, 10, 100)
# 生成正弦曲線的Y軸數據
y1 = np.sin(x)# 在主要坐標軸上繪制正弦曲線
ax1.plot(x, y1, color='tab:blue')# 創建共享相同X軸的次要坐標軸
ax2 = ax1.twinx()# 設置次要坐標軸的標簽
ax2.set_ylabel('Secondary Axis - Cosine Curve', color='tab:red')# 生成余弦曲線的Y軸數據
y2 = np.cos(x)# 在次要坐標軸上繪制余弦曲線
ax2.plot(x, y2, color='tab:red')# 添加圖例
ax1.legend(['Sine Curve'], loc='upper left')
ax2.legend(['Cosine Curve'], loc='upper right')# 添加網格線
ax1.grid()plt.title('Primary and Secondary Axis Example')
plt.show()
在這個示例中,首先創建了一個包含主軸(ax1
)的Figure,并繪制了正弦曲線。
然后,我們創建了一個共享X軸的次軸(ax2
),并在次軸上繪制了余弦曲線。
還對每個軸設置了標題、標簽、顏色,并添加了圖例和網格線,以增強圖形的可讀性。
這個示例展示了使用多個坐標軸創建的圖形,實際使用中可以根據自己的需求進一步自定義和擴展圖形。
4、3D繪圖
Matplotlib
是一個用于數據可視化的Python庫,它支持繪制各種類型的圖形,包括三維圖形。
在Matplotlib中,比如可以使用mpl_toolkits.mplot3d
模塊來創建和繪制三維圖形。
下面繪制一個簡單的三維表面圖,包括主軸和次軸,大家可以簡單看下,明白其中的原理。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np# 創建一個三維圖形的figure
fig = plt.figure()# 創建一個三維坐標軸
ax = fig.add_subplot(111, projection='3d')# 創建數據
# 這里我們以一個二維的網格為例,生成X和Y坐標,然后使用一個函數來計算Z坐標
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2))# 繪制表面圖
surf = ax.plot_surface(X, Y, Z, cmap='viridis')# 添加顏色條
fig.colorbar(surf)# 設置坐標軸標簽
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')# 顯示圖形
plt.show()
上述代碼中,首先創建了一個figure
,然后在該figure
上創建了一個三維坐標軸ax
。
接下來,生成了X、Y坐標的網格數據,并使用一個簡單的函數計算Z坐標。
然后,使用plot_surface
方法繪制了表面圖,并使用cmap
參數設置了顏色映射。
最后,我們添加了顏色條和坐標軸標簽,并顯示了圖形。
Matplotlib提供了豐富的功能和選項來創建各種類型的三維圖形,以展示更復雜的數據關系。
5、動態交互繪圖
Matplotlib
還可以用于創建靜態和動態交互圖形。
這個知識點中,簡要介紹如何使用Matplotlib創建一個允許用戶進行交互操作的動態圖形。
接下來,我們將使用Matplotlib的FuncAnimation
類來創建一個動態圖形,同時也會使用IPython的display
函數來在Jupyter Notebook中實時顯示動畫。
這里繪制一個簡單的正弦波,并且可以通過滑塊來控制波的頻率。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from IPython.display import display, clear_output# 創建一個空白圖形
fig, ax = plt.subplots()# 定義正弦波的參數
x = np.linspace(0, 2 * np.pi, 1000)
freq = 1.0 # 初始頻率# 初始繪制正弦波
line, = ax.plot(x, np.sin(freq * x))# 添加滑塊用于控制頻率
from ipywidgets import interactive
import ipywidgets as widgetsdef update(freq=1.0):# 更新正弦波的頻率line.set_ydata(np.sin(freq * x))ax.set_ylim(-1.5, 1.5)ax.set_title(f'Sine Wave (Frequency: {freq:.2f} Hz)')display(fig)# 創建交互式滑塊
slider = widgets.FloatSlider(value=1.0, min=0.1, max=5.0, step=0.1, description='Frequency')
interactive_plot = interactive(update, freq=slider)# 顯示動態圖形
display(interactive_plot)# 如果在Jupyter Notebook中使用,你會看到一個滑塊,通過滑塊可以調整正弦波的頻率。
可以通過滑塊來調整波的頻率。
在Jupyter Notebook中執行這段代碼,然后通過滑動滑塊來與圖形進行交互。
FuncAnimation
類用于創建動畫效果,interactive
函數用于創建交互式滑塊。
可以使用Matplotlib創建各種類型的交互式圖形,以滿足具體的需求。
6、繪制地圖
Matplotlib?
還可以繪制地圖和等高線圖。
如果要繪制一個復雜一些的等高線圖,需要使用一些額外的庫,比如 NumPy 和 Cartopy(用于地圖投影)。
下面演示如何使用 Matplotlib、NumPy 和 Cartopy 來繪制一個地理高程的等高線圖。
除了Matplotlib、NumPy,記得需要把 Cartopy 安裝好。
pip install cartopy
然后,使用以下示例代碼來繪制等高線圖:
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature# 創建一個地圖投影
projection = ccrs.PlateCarree()# 創建一個 Matplotlib 圖形窗口
fig, ax = plt.subplots(subplot_kw={'projection': projection}, figsize=(10, 8))# 創建一些示例數據(高程數據)
# 這里使用 NumPy 創建一個 2D 數組,表示高程值
# 你可以根據你的數據替換這些值
lats = np.linspace(-90, 90, 360)
lons = np.linspace(-180, 180, 720)
lons, lats = np.meshgrid(lons, lats)
elevation_data = np.sin(np.radians(lats)) * np.cos(np.radians(lons)) * 1000# 添加等高線圖
contour = plt.contourf(lons, lats, elevation_data, levels=20, cmap='terrain')# 添加海岸線和國界線
ax.add_feature(cfeature.COASTLINE)
ax.add_feature(cfeature.BORDERS, linestyle=':')# 添加顏色條
cbar = plt.colorbar(contour, ax=ax, shrink=0.8, orientation='horizontal')
cbar.set_label('Elevation (m)')# 設置地圖范圍(中國)
ax.set_extent([73, 135, 8, 53], crs=projection)# 添加標題
plt.title('Elevation Contour Map')# 顯示圖形
plt.show()
上述代碼創建了一個基本的等高線圖,使用了 Cartopy 進行地圖投影和地圖要素的添加,以及 Matplotlib 進行繪圖和圖形設置。
如果顯示范圍是世界地圖的話,修改這里的設置即可!
# 設置地圖范圍
ax.set_extent([-180, 180, -90, 90], crs=projection)
7、繪制統計圖表
Matplotlib 也可以繪制統計圖表,包括箱線圖(Box Plot),也稱為盒圖或箱型圖。
箱線圖是一種可視化數據分布的方式,它顯示了數據的中位數、四分位數、異常值等信息。
下面是一個使用Matplotlib繪制箱線圖的示例:
import matplotlib.pyplot as plt
import numpy as np# 創建示例數據
data = [np.random.normal(0, std, 100) for std in range(1, 5)]# 創建箱線圖
plt.figure(figsize=(8, 6))
plt.boxplot(data, vert=True, patch_artist=True, labels=['A', 'B', 'C', 'D'], notch=True)# 添加標題和標簽
plt.title('Box Plot Example')
plt.xlabel('Groups')
plt.ylabel('Values')# 自定義箱線的填充顏色
box_colors = ['lightblue', 'lightgreen', 'lightpink', 'lightyellow']
for box, color in zip(plt.boxplot(data, vert=True, patch_artist=True)['boxes'], box_colors):box.set_facecolor(color)# 添加網格線
plt.grid(True, linestyle='--', alpha=0.7)# 顯示圖形
plt.show()
首先創建了一些示例數據,其中包括四組具有不同標準差的正態分布數據。
然后,我們使用plt.boxplot
函數繪制箱線圖。參數解釋如下:
-
data
:包含數據的列表,每個列表對應一個箱線圖。 -
vert
:設置為True以垂直繪制箱線圖。 -
patch_artist
:設置為True以允許自定義箱線圖的樣式。 -
labels
:用于指定每個箱線圖的標簽。 -
notch
:設置為True以在箱線圖的中位數處添加缺口。
還自定義了箱線的填充顏色,并添加了標題、標簽和網格線。
這個示例中的箱線圖是一個簡單示例,你可以根據實際情況對其進行更復雜的定制。
最后
總的來說,Matplotlib 是一個強大而靈活的 Python 數據可視化工具,可用于創建各種類型的圖表,幫助用戶更好地理解和呈現數據。如果你需要在數據分析和可視化中使用 Python,Matplotlib 是一個不可或缺的工具之一。