Python/ target=_blank class=infotextkey>Python Matplotlib 的使用
Python Matplotlib 是一個基于 Python 的 2D 繪圖庫,能夠生成各種靜態、動態、交互式的圖表,支持多種輸出格式,包括圖片、PDF、SVG 等。Matplotlib 提供了大量的繪圖函數和工具,可以方便地進行數據可視化、統計分析、科學計算等操作。
本文將深入介紹 Python Matplotlib 的使用,包括常用的 API、參數、返回值,以及各種詳細的示例代碼,幫助讀者更好地掌握這個強大的數據可視化工具。
安裝和導入 Matplotlib
在開始使用 Matplotlib 之前,需要先安裝 Matplotlib 庫。可以使用 pip 命令進行安裝。
pip install matplotlib
安裝完成后,在 Python 中導入 Matplotlib 庫。
import matplotlib.pyplot as plt
繪制簡單的線圖
在 Matplotlib 中,可以使用 plot 函數繪制簡單的線圖。plot 函數的基本語法如下:
plt.plot(x, y, fmt, **kwargs)
其中,x 和 y 分別表示 x 軸和 y 軸的數據,fmt 是一個字符串,用于指定線條的樣式,**kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個簡單的示例,用于繪制一條正弦曲線。
import numpy as np
import matplotlib.pyplot as plt
# 生成 x 軸和 y 軸數據
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
# 繪制正弦曲線
plt.plot(x, y)
# 顯示圖形
plt.show()
上述代碼中,使用 linspace 函數生成了一個包含 100 個元素的數組,用于表示 x 軸的數據范圍。然后使用 sin 函數生成了對應的 y 軸數據,最后調用 plot 函數繪制正弦曲線。
常用的線條樣式
在 Matplotlib 中,可以使用 fmt 字符串指定線條的樣式。fmt 字符串可以包含多個參數,用于指定線條的顏色、線型、標記等。下面是一些常用的參數:
- 顏色:可以使用單個字符表示顏色,如 "r" 表示紅色,"g" 表示綠色,"b" 表示藍色,"y" 表示黃色等;也可以使用顏色名稱,如 "red" 表示紅色,"green" 表示綠色等。
- 線型:可以使用單個字符表示線型,如 "-" 表示實線,"--" 表示虛線,":" 表示點線,"-." 表示點劃線等。
- 標記:可以使用單個字符表示標記,如 "." 表示點標記,"o" 表示圓形標記,"s" 表示正方形標記,"*" 表示星形標記等。
在 fmt 字符串中,可以使用這些參數組合出各種不同的線條樣式。例如,"ro--" 表示紅色圓形虛線,"bs:" 表示藍色正方形點線等。
下面是一個示例,用于演示不同的線條樣式。
import numpy as np
import matplotlib.pyplot as plt
# 生成 x 軸和 y 軸數據
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 繪制正弦曲線和余弦曲線
plt.plot(x, y1, "r-", label="sin")
plt.plot(x, y2, "b--", label="cos")
# 添加圖例
plt.legend()
# 顯示圖形
plt.show()
在上述代碼中,使用 plot 函數繪制了兩條曲線,一條是紅色實線的正弦曲線,一條是藍色虛線的余弦曲線。然后使用 legend 函數添加了圖例,最后調用 show 函數顯示圖形。
設置圖形屬性
在 Matplotlib 中,可以使用各種屬性設置函數來改變圖形的樣式,包括標題、坐標軸、標簽、顏色、線型等。下面是一些常用的屬性設置函數:
- title:設置圖形的標題。
- xlabel:設置 x 軸的標簽。
- ylabel:設置 y 軸的標簽。
- xlim:設置 x 軸的數據范圍。
- ylim:設置 y 軸的數據范圍。
- legend:添加圖例。
- grid:添加網格線。
- color:設置線條的顏色。
- linestyle:設置線條的樣式。
- linewidth:設置線條的寬度。
- marker:設置標記的樣式。
- markersize:設置標記的大小。
下面是一個示例,用于演示如何設置圖形屬性。
import numpy as np
import matplotlib.pyplot as plt
# 生成 x 軸和 y 軸數據
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 繪制正弦曲線和余弦曲線
plt.plot(x, y1, color="red", linestyle="--", linewidth=2, label="sin")
plt.plot(x, y2, color="blue", linestyle="-.", linewidth=2, label="cos")
# 設置標題、標簽、數據范圍、網格線等屬性
plt.title("Sin and Cos Curve")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.xlim(0, 2*np.pi)
plt.ylim(-1.2, 1.2)
plt.legend()
plt.grid()
# 顯示圖形
plt.show()
在上述代碼中,使用 plot 函數繪制了兩條曲線,并通過 color、linestyle、linewidth 等屬性設置函數改變了它們的樣式。然后使用 title、xlabel、ylabel、xlim、ylim、legend、grid 等屬性設置函數添加了標題、標簽、數據范圍、圖例、網格線等屬性,最后調用 show 函數顯示圖形。
繪制多個圖形
在 Matplotlib 中,可以使用 subplot 函數繪制多個圖形。subplot 函數的基本語法如下:
plt.subplot(nrows, ncols, index, **kwargs)
其中,nrows 和 ncols 分別表示圖形的行數和列數,index 表示當前圖形的位置,從左到右,從上到下逐個編號。
下面是一個示例,用于演示如何繪制多個圖形。
import numpy as np
import matplotlib.pyplot as plt
# 生成 x 軸和 y 軸數據
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 繪制正弦曲線和余弦曲線
plt.subplot(2, 1, 1)
plt.plot(x, y1, "r-", label="sin")
plt.title("Sin and Cos Curve")
plt.legend()
plt.subplot(2, 1, 2)
plt.plot(x, y2, "b--", label="cos")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.legend()
# 顯示圖形
plt.show()
在上述代碼中,使用 subplot 函數分別繪制了兩個圖形,一個是紅色實線的正弦曲線,一個是藍色虛線的余弦曲線。然后使用 title、xlabel、ylabel、legend 等屬性設置函數添加了標題、標簽、圖例等屬性,最后調用 show 函數顯示圖形。
繪制散點圖
在 Matplotlib 中,可以使用 scatter 函數繪制散點圖。scatter 函數的基本語法如下:
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, alpha=None, linewidths=None, edgecolors=None, **kwargs)
其中,x 和 y 分別表示 x 軸和 y 軸的數據,s
繼續
表示散點的大小,c 表示散點的顏色,marker 表示散點的形狀,cmap 表示顏色映射表,alpha 表示透明度,linewidths 表示邊框線寬度,edgecolors 表示邊框顏色,**kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個示例,用于演示如何繪制散點圖。
import numpy as np
import matplotlib.pyplot as plt
# 生成隨機數據
np.random.seed(42)
x = np.random.randn(100)
y = np.random.randn(100)
colors = np.random.rand(100)
sizes = 1000 * np.random.rand(100)
# 繪制散點圖
plt.scatter(x, y, s=sizes, c=colors, alpha=0.5)
# 顯示圖形
plt.show()
在上述代碼中,使用 scatter 函數繪制了一個散點圖,散點的大小和顏色都是隨機生成的。然后使用 alpha 參數設置了散點的透明度,最后調用 show 函數顯示圖形。
繪制條形圖
在 Matplotlib 中,可以使用 bar 函數繪制條形圖。bar 函數的基本語法如下:
plt.bar(x, height, width=0.8, bottom=None, align="center", color=None, edgecolor=None, linewidth=None, tick_label=None, **kwargs)
其中,x 表示條形圖的橫坐標,height 表示條形圖的高度,width 表示條形的寬度,bottom 表示條形圖的底部位置,align 表示條形的對齊方式,color 表示條形的顏色,edgecolor 表示邊框的顏色,linewidth 表示邊框的寬度,tick_label 表示條形的標簽,**kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個示例,用于演示如何繪制條形圖。
import numpy as np
import matplotlib.pyplot as plt
# 生成隨機數據
np.random.seed(42)
x = np.arange(1, 11)
y = np.random.randint(1, 10, size=10)
# 繪制條形圖
plt.bar(x, y, width=0.6, align="center", color="red", alpha=0.5)
# 添加標簽和標題
plt.xticks(x, ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"])
plt.xlabel("Category")
plt.ylabel("Value")
plt.title("Bar Chart")
# 顯示圖形
plt.show()
在上述代碼中,使用 bar 函數繪制了一個條形圖,條形的高度和顏色都是隨機生成的。然后使用 width、align、color、alpha 等屬性設置函數改變了它們的樣式。接著使用 xticks、xlabel、ylabel、title 等屬性設置函數添加了標簽和標題,最后調用 show 函數顯示圖形。
繪制直方圖
在 Matplotlib 中,可以使用 hist 函數繪制直方圖。hist 函數的基本語法如下:
plt.hist(x, bins=None, range=None, density=False, cumulative=False, histtype="bar", align="mid", orientatinotallow="vertical", color=None, label=None, stacked=False, **kwargs)
其中,x 表示直方圖的數據,bins 表示直方圖的分組數目,range 表示直方圖的數據范圍,density 表示是否將直方圖歸一化,cumulative 表示是否繪制累計分布圖,histtype 表示直方圖的類型,align 表示直方圖的對齊方式,orientation 表示直方圖的方向,color 表示直方圖的顏色,label 表示直方圖的標簽,stacked 表示是否堆疊直方圖,**kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個示例,用于演示如何繪制直方圖。
import numpy as np
import matplotlib.pyplot as plt
# 生成隨機數據
np.random.seed(42)
data = np.random.randn(1000)
# 繪制直方圖
plt.hist(data, bins=20, density=True, alpha=0.5, color="red")
# 添加標簽和標題
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.title("Histogram")
# 顯示圖形
plt.show()
在上述代碼中,使用 hist 函數繪制了一個直方圖,直方圖的數據是隨機生成的。然后使用 bins、density、alpha、color 等屬性設置函數改變了它們的樣式。接著使用 xlabel、ylabel、title 等屬性設置函數添加了標簽和標題,最后調用 show 函數顯示圖形。
繪制餅圖
在 Matplotlib 中,可以使用 pie 函數繪制餅圖。pie 函數的基本語法如下:
plt.pie(x, explode=None, labels=None, colors=None, autopct=None, shadow=False, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, **kwargs)
其中,x 表示餅圖的數據,explode 表示餅圖中每個扇形塊是否分離出來,labels 表示餅圖中每個扇形塊的標簽,colors 表示餅圖中每個扇形塊的顏色,autopct 表示餅圖中每個扇形塊的百分比,shadow 表示是否添加陰影效果,startangle 表示起始角度,radius 表示餅圖的半徑,counterclock 表示是否按逆時針方向繪制餅圖,wedgeprops 表示扇形塊的屬性,textprops 表示文本標簽的屬性,center 表示餅圖的中心位置,frame 表示是否顯示圖形邊框,**kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個示例,用于演示如何繪制餅圖。
import matplotlib.pyplot as plt
# 設置數據
labels = ["A", "B", "C", "D"]
sizes = [15, 30, 45, 10]
colors = ["red", "green", "blue", "yellow"]
explode = (0, 0.1, 0, 0)
# 繪制餅圖
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct="%1.1f%%", shadow=True, startangle=90)
# 添加標題
plt.title("Pie Chart")
# 顯示圖形
plt.show()
在上述代碼中,使用 pie 函數繪制了一個餅圖,餅圖的數據、標簽、顏色、分離程度等都是手動設置的。然后使用 autopct、shadow、startangle 等屬性設置函數改變了它們的樣式。最后調用 title 函數添加了標題,調用 show 函數顯示圖形。
繪制箱線圖
在 Matplotlib 中,可以使用 boxplot 函數繪制箱線圖。boxplot 函數的基本語法如下:
plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positinotallow=None, widths=None, patch_artist=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, cApprops=None, whiskerprops=None, manage_ticks=True, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, **kwargs)
其中:
- x 表示箱線圖的數據。
- notch 表示是否繪制缺口箱線圖。
- sym 表示異常值的樣式。
- vert 表示箱線圖的方向。
- whis 表示箱線圖的須長度。
- positions 表示箱線圖的位置。
- widths 表示箱線圖的寬度。
- patch_artist 表示是否填充箱體顏色。
- boxprops 表示箱體的屬性。
- labels表示箱線圖的標簽。
- flierprops 表示異常值的屬性。
- medianprops 表示中位數的屬性。
- meanprops 表示平均值的屬性。
- capprops 表示箱線圖頂部和底部的屬性。
- whiskerprops 表示須的屬性。
- bootstrap 表示是否進行 bootstrap 置信區間估計。
- usermedians 表示中位數的位置。
- conf_intervals 表示置信區間的范圍。
- meanline 表示是否繪制平均線。
- showmeans 表示是否顯示平均值。
- showcaps 表示是否顯示箱線圖的頂部和底部。
- showbox 表示是否顯示箱體。
- showfliers 表示是否顯示異常值。
- **kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個示例,用于演示如何繪制箱線圖。
import numpy as np
import matplotlib.pyplot as plt
# 生成隨機數據
np.random.seed(42)
data = np.random.randn(100, 5)
# 繪制箱線圖
plt.boxplot(data, notch=True, sym="r+", vert=False, whis=1.5, widths=0.5, patch_artist=True, medianprops={"color": "black", "linewidth": 2}, boxprops={"facecolor": "red", "linewidth": 2}, whiskerprops={"linewidth": 2}, capprops={"linewidth": 2})
# 添加標簽和標題
plt.xlabel("Value")
plt.ylabel("Category")
plt.title("Box Plot")
# 顯示圖形
plt.show()
在上述代碼中,使用 boxplot 函數繪制了一個箱線圖,箱線圖的數據是隨機生成的。然后使用 notch、sym、vert、whis、widths、patch_artist、medianprops、boxprops、whiskerprops、capprops 等屬性設置函數改變了它們的樣式。接著使用 xlabel、ylabel、title 等屬性設置函數添加了標簽和標題,最后調用 show 函數顯示圖形。
繪制等高線圖
在 Matplotlib 中,可以使用 contour 函數繪制等高線圖。contour 函數的基本語法如下:
plt.contour(X, Y, Z, levels=None, colors=None, cmap=None, norm=None, alpha=None, linewidths=None, linestyles=None, hatches=None, extend=None, antialiased=None, **kwargs)
其中,X、Y 表示等高線圖的網格坐標,Z 表示等高線圖的高度,levels 表示等高線圖的高度分層,colors 表示等高線圖的顏色,cmap 表示顏色映射表,norm 表示顏色映射表的歸一化方式,alpha 表示透明度,linewidths 表示等高線圖的線寬,linestyles 表示等高線圖的線型,hatches 表示等高線圖的填充方式,extend 表示顏色映射表的范圍,antialiased 表示是否進行抗鋸齒處理,**kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個示例,用于演示如何繪制等高線圖。
import numpy as np
import matplotlib.pyplot as plt
# 生成網格坐標和高度數據
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)
# 繪制等高線圖
plt.contour(X, Y, Z, levels=10, cmap="coolwarm")
# 添加顏色條和標題
plt.colorbar()
plt.title("Contour Plot")
# 顯示圖形
plt.show()
在上述代碼中,使用 contour 函數繪制了一個等高線圖,等高線圖的網格坐標和高度數據都是手動設置的。然后使用 levels、cmap 等屬性設置函數改變了它們的樣式。接著使用 colorbar、title 等屬性設置函數添加了顏色條和標題,最后調用 show 函數顯示圖形。
繪制熱力圖
在 Matplotlib 中,可以使用 imshow 函數繪制熱力圖。imshow 函數的基本語法如下:
plt.imshow(X, cmap=None, norm=None, aspect=None, interpolatinotallow=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, filternorm=1, filterrad=4.0, resample=None, url=None, **kwargs)
其中,X 表示熱力圖的數據,cmap 表示顏色映射表,norm 表示顏色映射表的歸一化方式,aspect 表示熱力圖的寬高比,interpolation 表示插值方式,alpha 表示透明度,vmin、vmax 表示顏色映射表的范圍,origin 表示熱力圖的坐標原點,extent 表示熱力圖的坐標范圍,filternorm、filterrad 表示濾波器參數,resample 表示重新采樣方式,url 表示熱力圖的 URL,**kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個示例,用于演示如何繪制熱力圖。
import numpy as np
import matplotlib.pyplot as plt
# 生成隨機數據
np.random.seed(42)
data = np.random.randn(10, 10)
# 繪制熱力圖
plt.imshow(data, cmap="coolwarm", interpolation="nearest")
# 添加顏色條和標題
plt.colorbar()
plt.title("Heatmap")
# 顯示圖形
plt.show()
在上述代碼中,使用 imshow 函數繪制了一個熱力圖,熱力圖的數據是隨機生成的。然后使用 cmap、interpolation 等屬性設置函數改變了它們的樣式。接著使用 colorbar、title 等屬性設置函數添加了顏色條和標題,最后調用 show 函數顯示圖形。
繪制極坐標圖
在 Matplotlib 中,可以使用 polar 函數繪制極坐標圖。polar 函數的基本語法如下:
plt.polar(theta, r, **kwargs)
其中,theta 表示極坐標圖的角度,r 表示極坐標圖的半徑,**kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個示例,用于演示如何繪制極坐標圖。
import numpy as np
import matplotlib.pyplot as plt
# 生成數據
theta = np.linspace(0, 2 * np.pi, 1000)
r = np.sin(5 * theta) * np.cos(3 * theta)
# 繪制極坐標圖
plt.polar(theta, r)
# 添加標題
plt.title("Polar Plot")
# 顯示圖形
plt.show()
在上述代碼中,使用 polar 函數繪制了一個極坐標圖,極坐標圖的數據是手動生成的。然后使用 title 等屬性設置函數添加了標題,最后調用 show 函數顯示圖形。
繪制圖像
在 Matplotlib 中,可以使用 imshow 函數繪制圖像。imshow 函數的基本語法如下:
plt.imshow(X, cmap=None, norm=None, aspect=None, interpolatinotallow=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, filternorm=1, filterrad=4.0, resample=None, url=None, **kwargs)
其中,X 表示圖像的數據,cmap 表示顏色映射表,norm 表示顏色映射表的歸一化方式,aspect 表示圖像的寬高比,interpolation 表示插值方式,alpha 表示透明度,vmin、vmax 表示顏色映射表的范圍,origin 表示圖像的坐標原點,extent 表示圖像的坐標范圍,filternorm、filterrad 表示濾波器參數,resample 表示重新采樣方式,url 表示圖像的 URL,**kwargs 是一些可選參數,用于設置圖形的屬性。
下面是一個示例,用于演示如何繪制圖像。
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# 讀取圖像數據
img = mpimg.imread("example.png")
# 繪制圖像
plt.imshow(img)
# 添加標題
plt.title("Image")
# 顯示圖形
plt.show()
在上述代碼中,使用 imread 函數讀取了一張圖像的數據,并使用 imshow 函數繪制了這張圖像。然后使用 title 等屬性設置函數添加了標題,最后調用 show 函數顯示圖形。
繪制動畫
在 Matplotlib 中,可以使用 animation 模塊繪制動畫。animation 模塊提供了許多用于繪制動畫的類和函數,包括 FuncAnimation、ArtistAnimation、animation、FFmpegWriter 等。這些類和函數可以用于創建和保存動畫,設置動畫的幀數、間隔時間、動畫效果等。
下面是一個示例,用于演示如何使用 FuncAnimation 類繪制動畫。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# 創建畫布和子圖
fig, ax = plt.subplots()
# 設置數據和初始線條
x = np.linspace(0, 2 * np.pi, 200)
line, = ax.plot(x, np.sin(x))
# 定義更新函數
def update(frame):
line.set_ydata(np.sin(x + frame / 10))
return line,
# 創建動畫并顯示
ani = FuncAnimation(fig, update, frames=100, interval=20)
plt.show()
在上述代碼中,首先創建了一個畫布和一個子圖。然后設置了數據和初始線條,接著定義了一個更新函數,用于更新線條的數據。最后使用 FuncAnimation 類創建了一個動畫,并通過 show 函數顯示動畫。在創建 FuncAnimation 實例時,需要傳入 fig、update、frames 和 interval 等參數,用于指定動畫的畫布、更新函數、幀數和間隔時間。在更新函數中,需要返回更新后的線條對象,用于動畫的繪制。
這個是會動的哦
繪制3D圖形
在 Matplotlib 中,可以使用 mplot3d 模塊繪制3D圖形。mplot3d 模塊提供了許多用于繪制3D圖形的類和函數,包括 Axes3D、plot_surface、plot_wireframe、plot_trisurf 等。這些類和函數可以用于創建和保存3D圖形,設置3D圖形的視角、坐標軸、顏色映射表等。
下面是一個示例,用于演示如何使用 Axes3D 類繪制3D散點圖。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 創建畫布和3D子圖
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
# 生成數據
x = np.random.normal(size=100)
y = np.random.normal(size=100)
z = np.random.normal(size=100)
# 繪制3D散點圖
ax.scatter(x, y, z)
# 添加標題和坐標軸標簽
ax.set_title("3D Scatter Plot")
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
# 顯示圖形
plt.show()
在上述代碼中,首先創建了一個畫布和一個3D子圖。然后使用 np.random.normal 函數生成了一些隨機數據,接著使用 Axes3D 類創建了一個3D散點圖,并通過 scatter 函數繪制了散點圖。最后使用 set_title、set_xlabel、set_ylabel、set_zlabel 等屬性設置函數添加了標題和坐標
這個3D圖可以拖拽哦