除了繪製各類分析圖形(比如柱狀圖,折線圖,餅圖等等)以外,matplotlib 也可以在畫布上任意繪製各類幾何圖形。這對於電腦圖形學、幾何演算法和電腦輔助設計等領域非常重要。 matplitlib 中的 patches 類提供了豐富的幾何對象,本篇拋磚引玉,介紹其中幾種常用的幾何圖形繪製方法。 其 ...
除了繪製各類分析圖形(比如柱狀圖,折線圖,餅圖等等)以外,matplotlib
也可以在畫布上任意繪製各類幾何圖形。
這對於電腦圖形學、幾何演算法和電腦輔助設計等領域非常重要。
matplitlib
中的 patches
類提供了豐富的幾何對象,
本篇拋磚引玉,介紹其中幾種常用的幾何圖形繪製方法。
其實matplitlib
封裝的各種現成的圖形對象(柱狀圖,折線圖,餅圖等等)本質也是基於 patches
來繪製的。
1. 多邊形類
多邊形可以用在地理信息圖表中,用來表示地理區域的邊界或地理要素的形狀;
也可以用來展示數據的分佈區域或邊界,比如用在散點圖中。
幾種常用的多邊形繪製方式如下:
1.1. 矩形
繪製矩形用Rectangle
對象。
import matplotlib.pyplot as plt
import matplotlib.patches as mptch
fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111)
r1 = mptch.Rectangle(xy=(0.2, 0.3),
height=0.5,
width=0.7,
color="lightblue")
r2 = mptch.Rectangle(xy=(0.4, 0.6),
height=0.3,
width=0.2,
angle=60,
color="lightgreen")
ax.add_patch(r1)
ax.add_patch(r2)
plt.show()
Rectangle
對象的主要參數:
- xy:矩形的起始點,也就是左下角的點
- height:矩形的高
- width:矩形的寬,高和寬設置一樣就是正方形
- angle:沿著起始點,逆時針旋轉的角度
- color:矩形的顏色,預設藍色
代碼運行效果:
1.2. 任意多邊形
任意多邊形比較簡單,給Polygon
對象傳入多邊形的各個頂點即可。
fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111)
#三角形
p1 = mptch.Polygon(xy=[(0.1, 0.1), (0.4, 0.1), (0.3, 0.6)],
color='lightblue')
#四邊形
p2 = mptch.Polygon(xy=[(0.5, 0.5), (0.9, 0.5), (0.9, 0.1), (0.6, 0.2)],
color='lightgreen')
ax.add_patch(p1)
ax.add_patch(p2)
plt.show()
Polygon
對象的主要參數:
- xy:多邊形各個頂點的列表
- color:多邊形的顏色,預設藍色
代碼運行效果:
1.3. 正多邊形
雖然用Polygon
對象也可以繪製正多邊形,但是需要計算各個頂點的坐標位置,很麻煩。matplotlib
提供了專門繪製正多邊形的對象CirclePolygon
。
fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111)
p1 = mptch.CirclePolygon(xy=(0.3, 0.3),
radius=0.2,
resolution=6,
color='lightgreen')
p2 = mptch.CirclePolygon(xy=(0.6, 0.6),
radius=0.2,
resolution=8,
color='lightblue')
ax.add_patch(p1)
ax.add_patch(p2)
plt.show()
CirclePolygon
對象的主要參數:
- xy:正多邊形的中心點坐標
- radius:正多邊形的外接圓半徑
- resolution:正多邊形的邊數
- color:正多邊形的顏色,預設藍色
代碼運行效果:
2. 圓形類
圓形類也是使用比較多的形狀。
2.1. 圓和橢圓
繪製圓和橢圓分別用Circle
和Ellipse
對象。
fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111)
c = mptch.Circle(xy=(0.5, 0.5),
radius=0.4,
color="lightblue")
e = mptch.Ellipse(xy=(0.5, 0.5),
height=0.3,
width=0.4,
color="lightgreen")
ax.add_patch(c)
ax.add_patch(e)
plt.show()
Circle
對象的主要參數:
- xy:圓心坐標
- radius:圓的半徑
- color:圓的顏色,預設藍色
Ellipse
對象的主要參數:
- xy:橢圓心坐標
- height:橢圓的高度
- width:橢圓的寬度
- color:橢圓的顏色,預設藍色
**PS. **當橢圓的height
和width
設置一樣時,橢圓就是圓了。
代碼運行效果:
3. 圓弧和扇形
除了完整的圓,也可以繪製弧形(Arc
對象)和扇形(Wedge
對象)。
fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111)
#圓弧
a = mptch.Arc(xy=(0.4, 0.7),
width=0.5, height=0.5,
angle=270,
theta1=0, theta2=120,
linewidth=10,
color="lightblue")
#扇形
w = mptch.Wedge(center=(0.3, 0.5),
r=0.2,
theta1=30, theta2=330,
color="lightgreen")
ax.add_patch(a)
ax.add_patch(w)
plt.show()
Arc
對象的主要參數:
- xy:圓弧的圓心坐標
- width:圓弧的寬度
- height:圓弧的高度
- angle:圓弧朝向的角度,逆時針旋轉
- theta1:圓弧開始的角度,逆時針旋轉
- theta2:圓弧結束的角度,逆時針旋轉
- linewidth:圓弧的粗細
- color:圓弧的顏色,預設藍色
PS. width
和height
相等時,圓弧相當於是圓的一段,不相等時,圓弧相當於是橢圓的一段。
圓弧開始的角度其實就是 angle+theta1
,結束的角度是angle+theta2
。
Wedge
對象的主要參數:
- xy:扇形的圓心坐標
- r:扇形的半徑
- theta1:扇形開始的角度,逆時針旋轉
- theta2:扇形結束的角度,逆時針旋轉
- color:扇形的顏色,預設藍色
代碼運行效果:(本來想畫個魚鉤釣魚的抽象效果的,:))
4. 箭頭
箭頭也是一種比較常用的圖形,可用來標註和指示數據的方向或關聯性,比如增長或下降趨勢;
還可以用來表示數據流向或關係。
matplotlib
中用Arrow
對象來繪製箭頭。
fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111)
x, y, dx, dy = 0.1, 0.2, 0.2, 0.2
a1 = mptch.Arrow(x=x, y=y,
dx=dx, dy=dy,
width=0.2, color="lightblue")
a2 = mptch.Arrow(x=x+dx, y=y+dy,
dx=dx, dy=dy,
width=0.4, color="lightgreen")
ax.add_patch(a1)
ax.add_patch(a2)
plt.show()
Arrow
對象的主要參數:
- x:箭頭的起點
X
坐標 - y:箭頭的起點
Y
坐標 - dx:箭頭的終點
X
坐標偏移起點X
坐標的值 - dy:箭頭的終點
Y
坐標偏移起點Y
坐標的值 - width:箭頭的寬度
- color:箭頭的顏色,預設藍色
PS. 其實就是起點坐標(x, y)
,終點坐標(x+dx, y+dy)
。
代碼運行效果:
5. 總結
幾何圖形是matplotlib
最基本的能力,複雜花哨的分析圖表歸根結底都是這些基本的幾何圖形。
除了本篇介紹的這些,完整的patches
可以參考官方文檔:https://matplotlib.org/stable/api/patches_api.html