Matplotlib繪圖基礎(chǔ)之幾何圖形的繪制詳解
除了繪制各類(lèi)分析圖形(比如柱狀圖,折線(xiàn)圖,餅圖等等)以外,matplotlib 也可以在畫(huà)布上任意繪制各類(lèi)幾何圖形。
這對(duì)于計(jì)算機(jī)圖形學(xué)、幾何算法和計(jì)算機(jī)輔助設(shè)計(jì)等領(lǐng)域非常重要。
matplitlib 中的 patches 類(lèi)提供了豐富的幾何對(duì)象,
本篇拋磚引玉,介紹其中幾種常用的幾何圖形繪制方法。
其實(shí)matplitlib封裝的各種現(xiàn)成的圖形對(duì)象(柱狀圖,折線(xiàn)圖,餅圖等等)本質(zhì)也是基于 patches 來(lái)繪制的。
1. 多邊形類(lèi)
多邊形可以用在地理信息圖表中,用來(lái)表示地理區(qū)域的邊界或地理要素的形狀;
也可以用來(lái)展示數(shù)據(jù)的分布區(qū)域或邊界,比如用在散點(diǎn)圖中。
幾種常用的多邊形繪制方式如下:
1.1. 矩形
繪制矩形用Rectangle對(duì)象。
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對(duì)象的主要參數(shù):
- xy:矩形的起始點(diǎn),也就是左下角的點(diǎn)
- height:矩形的高
- width:矩形的寬,高和寬設(shè)置一樣就是正方形
- angle:沿著起始點(diǎn),逆時(shí)針旋轉(zhuǎn)的角度
- color:矩形的顏色,默認(rèn)藍(lán)色
代碼運(yùn)行效果:

1.2. 任意多邊形
任意多邊形比較簡(jiǎn)單,給Polygon對(duì)象傳入多邊形的各個(gè)頂點(diǎn)即可。
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對(duì)象的主要參數(shù):
- xy:多邊形各個(gè)頂點(diǎn)的列表
- color:多邊形的顏色,默認(rèn)藍(lán)色
代碼運(yùn)行效果:

1.3. 正多邊形
雖然用Polygon對(duì)象也可以繪制正多邊形,但是需要計(jì)算各個(gè)頂點(diǎn)的坐標(biāo)位置,很麻煩。
matplotlib提供了專(zhuān)門(mén)繪制正多邊形的對(duì)象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對(duì)象的主要參數(shù):
- xy:正多邊形的中心點(diǎn)坐標(biāo)
- radius:正多邊形的外接圓半徑
- resolution:正多邊形的邊數(shù)
- color:正多邊形的顏色,默認(rèn)藍(lán)色
代碼運(yùn)行效果:

2. 圓形類(lèi)
圓形類(lèi)也是使用比較多的形狀。
2.1. 圓和橢圓
繪制圓和橢圓分別用Circle和Ellipse對(duì)象。
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對(duì)象的主要參數(shù):
- xy:圓心坐標(biāo)
- radius:圓的半徑
- color:圓的顏色,默認(rèn)藍(lán)色
Ellipse對(duì)象的主要參數(shù):
- xy:橢圓心坐標(biāo)
- height:橢圓的高度
- width:橢圓的寬度
- color:橢圓的顏色,默認(rèn)藍(lán)色
**PS. **當(dāng)橢圓的height和width設(shè)置一樣時(shí),橢圓就是圓了。
代碼運(yùn)行效果:

3. 圓弧和扇形
除了完整的圓,也可以繪制弧形(Arc對(duì)象)和扇形(Wedge對(duì)象)。
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對(duì)象的主要參數(shù):
- xy:圓弧的圓心坐標(biāo)
- width:圓弧的寬度
- height:圓弧的高度
- angle:圓弧朝向的角度,逆時(shí)針旋轉(zhuǎn)
- theta1:圓弧開(kāi)始的角度,逆時(shí)針旋轉(zhuǎn)
- theta2:圓弧結(jié)束的角度,逆時(shí)針旋轉(zhuǎn)
- linewidth:圓弧的粗細(xì)
- color:圓弧的顏色,默認(rèn)藍(lán)色
PS. width和height相等時(shí),圓弧相當(dāng)于是圓的一段,不相等時(shí),圓弧相當(dāng)于是橢圓的一段。
圓弧開(kāi)始的角度其實(shí)就是 angle+theta1,結(jié)束的角度是angle+theta2。
Wedge對(duì)象的主要參數(shù):
- xy:扇形的圓心坐標(biāo)
- r:扇形的半徑
- theta1:扇形開(kāi)始的角度,逆時(shí)針旋轉(zhuǎn)
- theta2:扇形結(jié)束的角度,逆時(shí)針旋轉(zhuǎn)
- color:扇形的顏色,默認(rèn)藍(lán)色
代碼運(yùn)行效果:(本來(lái)想畫(huà)個(gè)魚(yú)鉤釣魚(yú)的抽象效果的,:))

4. 箭頭
箭頭也是一種比較常用的圖形,可用來(lái)標(biāo)注和指示數(shù)據(jù)的方向或關(guān)聯(lián)性,比如增長(zhǎng)或下降趨勢(shì);
還可以用來(lái)表示數(shù)據(jù)流向或關(guān)系。
matplotlib中用Arrow對(duì)象來(lái)繪制箭頭。
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對(duì)象的主要參數(shù):
- x:箭頭的起點(diǎn)
X坐標(biāo) - y:箭頭的起點(diǎn)
Y坐標(biāo) - dx:箭頭的終點(diǎn)
X坐標(biāo)偏移起點(diǎn)X坐標(biāo)的值 - dy:箭頭的終點(diǎn)
Y坐標(biāo)偏移起點(diǎn)Y坐標(biāo)的值 - width:箭頭的寬度
- color:箭頭的顏色,默認(rèn)藍(lán)色
PS. 其實(shí)就是起點(diǎn)坐標(biāo)(x, y),終點(diǎn)坐標(biāo)(x+dx, y+dy)。
代碼運(yùn)行效果:

5. 總結(jié)
幾何圖形是matplotlib最基本的能力,復(fù)雜花哨的分析圖表歸根結(jié)底都是這些基本的幾何圖形。
除了本篇介紹的這些,完整的patches可以參考官方文檔:https://matplotlib.org/stable/api/patches_api.html

以上就是Matplotlib繪圖基礎(chǔ)之幾何圖形的繪制詳解的詳細(xì)內(nèi)容,更多關(guān)于Matplotlib圖形的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python下載安裝requests庫(kù)的簡(jiǎn)單步驟
這篇文章主要給大家介紹了關(guān)于python下載安裝requests庫(kù)的簡(jiǎn)單步驟,使用Python的requests庫(kù)下載文件是一種常見(jiàn)的操作,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
將Python代碼打包成可調(diào)用SDK的四種方法小結(jié)(適用于移動(dòng)端 App)
Python是一門(mén)功能強(qiáng)大、生態(tài)豐富的語(yǔ)言,廣泛用于數(shù)據(jù)處理、機(jī)器學(xué)習(xí)和后端服務(wù),然而,Python并不是原生的移動(dòng)端開(kāi)發(fā)語(yǔ)言,如果希望在移動(dòng)端App中調(diào)用Python代碼,最好的方式是將Python代碼打包成SDK,所以本文給大家介紹了幾種Python代碼打包成可調(diào)用SDK的方法2025-04-04
基于python編寫(xiě)的五個(gè)拿來(lái)就能用的炫酷表白代碼分享
七夕快到了,所以本文小編將給給大家介紹五種拿來(lái)就能用的炫酷表白代碼,無(wú)限彈窗表白,愛(ài)心發(fā)射,心動(dòng)表白,玫瑰花等表白代碼,需要的小伙伴快來(lái)試試吧2023-08-08
教你利用PyTorch實(shí)現(xiàn)sin函數(shù)模擬
這篇文章主要給大家介紹了關(guān)于教你利用PyTorch實(shí)現(xiàn)sin函數(shù)模擬的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(五):socket的一些補(bǔ)充
前面已經(jīng)為大家介紹了python socket的一些相關(guān)知識(shí),這里為大家補(bǔ)充下,方便需要的朋友2014-06-06
Django中數(shù)據(jù)庫(kù)的數(shù)據(jù)關(guān)系:一對(duì)一,一對(duì)多,多對(duì)多
今天小編就為大家分享一篇關(guān)于Django中數(shù)據(jù)庫(kù)的數(shù)據(jù)關(guān)系:一對(duì)一,一對(duì)多,多對(duì)多,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10

