Python 数据分析三剑客之 Matplotlib(九):极区图 / 极坐标图 / 雷达图的绘制
CSDN 課程推薦:《Python 數據分析與挖掘》,講師劉順祥,浙江工商大學統計學碩士,數據分析師,曾擔任唯品會大數據部擔任數據分析師一職,負責支付環節的數據分析業務。曾與聯想、亨氏、網魚網咖等企業合作多個企業級項目。
Matplotlib 系列文章:
- Python 數據分析三劍客之 Matplotlib(一):初識 Matplotlib 與其 matplotibrc 配置文件
- Python 數據分析三劍客之 Matplotlib(二):文本描述 / 中文支持 / 畫布 / 網格等基本圖像屬性
- Python 數據分析三劍客之 Matplotlib(三):圖例 / LaTeX / 刻度 / 子圖 / 補丁等基本圖像屬性
- Python 數據分析三劍客之 Matplotlib(四):線性圖的繪制
- Python 數據分析三劍客之 Matplotlib(五):散點圖的繪制
- Python 數據分析三劍客之 Matplotlib(六):直方圖 / 柱狀圖 / 條形圖的繪制
- Python 數據分析三劍客之 Matplotlib(七):餅狀圖的繪制
- Python 數據分析三劍客之 Matplotlib(八):等高線 / 等值線圖的繪制
- Python 數據分析三劍客之 Matplotlib(九):極區圖 / 極坐標圖 / 雷達圖的繪制
- Python 數據分析三劍客之 Matplotlib(十):3D 圖的繪制
- Python 數據分析三劍客之 Matplotlib(十一):最熱門最常用的 50 個圖表【譯文】
另有 NumPy、Pandas 系列文章已更新完畢,歡迎關注:
- NumPy 系列文章:https://itrhx.blog.csdn.net/category_9780393.html
- Pandas 系列文章:https://itrhx.blog.csdn.net/category_9780397.html
推薦學習資料與網站(博主參與部分文檔翻譯):
- NumPy 官方中文網:https://www.numpy.org.cn/
- Pandas 官方中文網:https://www.pypandas.cn/
- Matplotlib 官方中文網:https://www.matplotlib.org.cn/
- NumPy、Matplotlib、Pandas 速查表:https://github.com/TRHX/Python-quick-reference-table
文章目錄
- 【1x00】了解極坐標
- 【2x00】基本方法 matplotlib.pyplot.polar()
- 【3x00】繪制極坐標
- 【4x00】繪制雷達圖
- 【4x01】理解 numpy.concatenate()
- 【4x02】理解 pyplot.thetagrids()
- 【4x03】繪制雷達圖
- 【5x00】高級用法:繪制極坐標散點圖
- 【5x01】方法一:pyplot.scatter() 與 pyplot.polar()
- 【5x02】方法二:pyplot.scatter() 與 pyplot.subplot()
- 【5x03】方法三:pyplot.scatter() 與 pyplot.axes()
- 【6x00】高級用法:繪制極坐標柱狀圖
- 【6x01】方法一:pyplot.bar() 與 pyplot.polar()
- 【6x02】方法二:pyplot.bar() 與 pyplot.subplot()
- 【6x03】方法三:pyplot.bar() 與 pyplot.axes()
這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 CSDN,作者 TRHX。 博客首頁:https://itrhx.blog.csdn.net/ 本文鏈接:https://itrhx.blog.csdn.net/article/details/106162412 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!
【1x00】了解極坐標
參考百度百科:極坐標,屬于二維坐標系統,創始人是牛頓,主要應用于數學領域。極坐標是指在平面內取一個定點 O,叫極點,引一條射線 Ox,叫做極軸,再選定一個長度單位和角度的正方向(通常取逆時針方向)。對于平面內任何一點 M,用 ρ 表示線段 OM 的長度(有時也用 r 表示),θ 表示從 Ox 到 OM 的角度,ρ 叫做點 M 的極徑,θ 叫做點 M 的極角,有序數對 (ρ,θ) 就叫點 M 的極坐標,這樣建立的坐標系叫做極坐標系。通常情況下,M 的極徑坐標單位為 1(長度單位),極角坐標單位為 rad(或°)。
【2x00】基本方法 matplotlib.pyplot.polar()
matplotlib.pyplot.polar() 方法可用于繪制極坐標圖。
基本語法:polar(theta, r, **kwargs)
- theta:點的角坐標,以弧度單位傳入參數;
- r:點的半徑坐標;
- **kwargs:可選項,其他 Line2D 屬性,常用屬性見表一。
拓展:數學上通常是用弧度而非角度,弧度單位縮寫為 rad,2π rad = 360°,1° ≈ 0.0174533 rad,1 rad ≈ 57.29578°。
- 角度轉換為弧度公式:弧度 = 角度 ÷ 180 × π
- 弧度轉換為角度公式:角度 = 弧度 × 180 ÷ π
| 表一:Line2D 部分屬性,完整屬性參見官方文檔: https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html |
| alpha | 線條透明度,float 類型,取值范圍:[0, 1],默認為 1.0,即不透明 |
| antialiased / aa | 是否使用抗鋸齒渲染,默認為 True |
| color / c | 線條顏色,支持英文顏色名稱及其簡寫、十六進制顏色碼等,更多顏色示例參見官網 Color Demo |
| fillstyle | 點的填充樣式,'full'、'left'、'right'、'bottom'、'top'、'none' |
| label | 圖例,具體參數參見: 《Python 數據分析三劍客之 Matplotlib(三):圖例 / LaTeX / 刻度 / 子圖 / 補丁等基本圖像屬性》 |
| linestyle / ls | 連接的線條樣式:'-' or 'solid', '--' or 'dashed', '-.' or 'dashdot' ':' or 'dotted', 'none' or ' ' or '' |
| linewidth / lw | 連接的線條寬度,float 類型,默認 0.8 |
| marker | 標記樣式,具體樣式參見表二 |
| markeredgecolor / mec | marker 標記的邊緣顏色 |
| markeredgewidth / mew | marker 標記的邊緣寬度 |
| markerfacecolor / mfc | marker 標記的顏色 |
| markerfacecoloralt / mfcalt | marker 標記的備用顏色 |
| markersize / ms | marker 標記的大小 |
| 表二:marker 標記的樣式,官方文檔: https://matplotlib.org/api/markers_api.html |
| "." | 點 |
| "," | 像素點 |
| "o" | 圓圈 |
| "v" | 倒三角 |
| "^" | 正三角 |
| "<" | 左三角 |
| ">" | 右三角 |
| "1" | 倒三叉星 |
| "2" | 正三叉星(類似奔馳車標形狀) |
| "3" | 左三叉星 |
| "4" | 右三叉星 |
| "8" | 八邊形 |
| "s" | 正方形 |
| "p" | 五邊形 |
| "P" | 填充的加號(粗加號) |
| "+" | 加號 |
| "*" | 星形 |
| "h" | 六邊形(底部是角) |
| "H" | 六邊形(底部是邊) |
| "x" | x 號 |
| "X" | 填充的 x 號(粗 x 號) |
| "D" | 粗菱形(對角線相等) |
| "d" | 細菱形(對角線不等) |
| "|" | 垂直線 |
| "_" | 水平線 |
| 0 | 水平線靠左 |
| 1 | 水平線靠右 |
| 2 | 垂直線靠上 |
| 3 | 垂直線靠下 |
| 4 | 左三角(比 "<" 更細) |
| 5 | 右三角(比 ">" 更細) |
| 6 | 正三角(比 "^" 更細) |
| 7 | 倒三角(比 "v" 更細) |
| 8 | 左三角(比 "<" 更細,靠左顯示) |
| 9 | 右三角(比 ">" 更細,靠右顯示) |
| 10 | 正三角(比 "^" 更細,靠上顯示) |
| 11 | 倒三角(比 "v" 更細,靠下顯示) |
| "None" / " " / "" | 無樣式 |
| '$...$' | 支持 LaTeX 數學公式,表達式用美元符號包圍起來 |
【3x00】繪制極坐標
import numpy as np import matplotlib.pyplot as plt# 設置中文顯示 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 設置畫布大小 plt.figure(figsize=(8.0, 6.0))# 設置三個數據,theta 為點位置的弧度參數,r 為點的半徑坐標 theta1 = np.array([1.25*np.pi, np.pi/2, 0]) theta2 = np.array([-np.pi/6, -np.pi/2, 0, np.pi/2, np.pi]) theta3 = np.arange(0., 2*np.pi, 0.5) r1 = np.array([4, 2, 3]) r2 = np.array([5, 2, 4, 5, 3]) r3 = np.random.randint(0, 5, 13)# 繪制第一個極坐標圖,點的標記樣式為細菱形,大小為8,點之間的連接線條樣式為: plt.polar(theta1, r1, marker='d', ms=8, ls=':', label='數據一') # 填充第一個極坐標圖,填充顏色為藍色,透明度0.3 plt.fill(theta1, r1, color='b', alpha=0.3) # 繪制第二個極坐標圖,marker、linestyle、color 三個參數可以組合以字符串形式傳入 plt.polar(theta2, r2, '*-g', ms=10, label='數據二') # 繪制第三個極坐標圖,設置 linestyle 為 none,即點與點之間不相連 plt.polar(theta3, r3, marker='o', ls='none', ms=8, color='r', label='數據三')plt.title('matplotlib.pyplot.polar 用法示例', pad=25, fontsize=15) plt.legend(bbox_to_anchor=(1.3, 1))plt.show()示例中 figure、title、legend 等其他方法的解釋可參見我的系列文章:
- 《Python 數據分析三劍客之 Matplotlib(一):初識 Matplotlib 與其 matplotibrc 配置文件》
- 《Python 數據分析三劍客之 Matplotlib(二):文本描述 / 中文支持 / 畫布 / 網格等基本圖像屬性》
- 《Python 數據分析三劍客之 Matplotlib(三):圖例 / LaTeX / 刻度 / 子圖 / 補丁等基本圖像屬性》
繪制結果如下圖:
【4x00】繪制雷達圖
雷達圖是以從同一點開始的軸上表示的三個或更多個定量變量的二維圖表的形式顯示多變量數據的圖形方法。軸的相對位置和角度通常是無信息的。 雷達圖也稱為網絡圖,蜘蛛圖,星圖,蜘蛛網圖,不規則多邊形,極坐標圖或 Kiviat 圖。它相當于平行坐標圖,軸徑向排列。
在前面的示例中,使用了 matplotlib.pyplot.fill() 方法對三個極坐標點圍成的圖形進行了填充,這就有點兒接近于雷達圖了,仔細觀察前面的示例,在填充時第一個點和最后一個點之間沒有連線,即沒有閉合,而更精確的雷達圖應該是閉合的,且外圍應該是文字描述而不是度數。
在繪制雷達圖之前需要提前了解一些函數。這些函數可以幫助我們實現閉合、自定義文字標簽等。
【4x01】理解 numpy.concatenate()
numpy.concatenate() 方法用于沿現有軸連接一系列數組,我們可以利用此方法來實現閉合操作。
基本語法:numpy.concatenate((a1, a2, ...)[, axis=0, out=None])
| a1, a2, … | 要連接的數組,必須擁有相同的維度 |
| axis | 沿指定軸連接數組,可選項,如果 axis 為 None,則數組在使用前被展平,默認值為 0 |
| out | 用于接收連接后的數組,可選項 |
用法示例:
import numpy as npa = np.array([1, 2, 3, 4]) b = np.array(['a', 'b', 'c', 'd']) print(np.concatenate((a, b)))輸出結果如下:
['1' '2' '3' '4' 'a' 'b' 'c' 'd']如果要實現數組的閉合,則可以傳入原數組和一個新數組,其中新數組中的元素為原數組中的第一個元素,示例如下:
import numpy as npa = np.array([1, 2, 3, 4]) print(np.concatenate((a, [a[0]])))輸出結果如下:
[1 2 3 4 1]【4x02】理解 pyplot.thetagrids()
matplotlib.pyplot.thetagrids() 方法用于獲取并設置當前極區圖上的極軸。
基本語法:matplotlib.pyplot.thetagrids(angles, labels=None, fmt=None, **kwargs)
| angles | 網格線的角度,浮點數、度數組成的元組 |
| labels | 每個極軸要使用的文本標簽,字符串組成的元組 |
| fmt | 格式化 angles 參數,如 '%1.2f' 保留兩位小數,注意,將使用以弧度為單位的角度 |
| **kwargs | 其他關鍵字參數,參見官方文檔 |
應用舉例:
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']plt.polar() angles = range(0, 360, 45) labels = ('東', '東北', '北', '西北', '西', '西南', '南', '東南') plt.thetagrids(angles, labels) plt.title('matplotlib.pyplot.thetagrids() 用法示例', pad=15)plt.show()【4x03】繪制雷達圖
numpy.concatenate() 方法能夠解決閉合問題,matplotlib.pyplot.thetagrids() 能夠解決自定義極軸和極軸的文本標記問題,因此就可以繪制一個標準的雷達圖了。示例如下:
import numpy as np import matplotlib.pyplot as plt# 設置中文顯示、畫布大小 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] plt.figure(figsize=(8.0, 6.0))# 分割圓并執行閉合操作(0-2π之間返回間隔均勻的6個弧度:π/3、2π/3、π、4π/3、5π/3、2π) theta = np.linspace(0, 2*np.pi, 6, endpoint=False) theta = np.concatenate((theta, [theta[0]]))# 設置兩組數據并執行閉合操作 data1 = np.array([9, 4, 3, 5, 2, 8]) data2 = np.array([3, 6, 9, 6, 3, 2]) data1 = np.concatenate((data1, [data1[0]])) data2 = np.concatenate((data2, [data2[0]]))# 繪制并填充兩組數據 plt.polar(theta, data1, 'bo-', label='小王') plt.polar(theta, data2, 'ro:', label='小張') plt.fill(theta, data1, color='b', alpha=0.3) plt.fill(theta, data2, color='r', alpha=0.3)# 將六個弧度(π/3、2π/3、π、4π/3、5π/3、2π)轉換成角度,并分別設置標簽 labels = np.array(['Python', 'Golang', 'Java', 'C++', 'PHP', 'JavaScript']) plt.thetagrids(theta[:6] * 180/np.pi, labels)# 設置刻度范圍、標題、圖例 plt.ylim(0, 10) plt.title('編程語言掌握程度') plt.legend(bbox_to_anchor=(1.3, 1)) plt.show()這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 CSDN,作者 TRHX。 博客首頁:https://itrhx.blog.csdn.net/ 本文鏈接:https://itrhx.blog.csdn.net/article/details/106162412 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!
【5x00】高級用法:繪制極坐標散點圖
matplotlib.pyplot.polar() 方法可以實現極坐標散點圖,但僅用這一個函數的話實現的樣式效果并不多,以下介紹另外三種繪制極坐標散點圖的方法:
-
matplotlib.pyplot.polar() 和 matplotlib.pyplot.scatter() 結合,前者繪制極坐標圖,后者在極坐標圖上繪制散點圖;
-
matplotlib.pyplot.subplot() 和 matplotlib.pyplot.scatter() 結合,前者添加子圖,其中指定 projection='polar' 即為極坐標圖, 后者在極坐標圖上繪制散點圖;
-
matplotlib.pyplot.axes() 與 matplotlib.pyplot.scatter() 結合,前者設置繪圖區參數,其中指定 projection='polar' 或 polar=True 即為極坐標圖, 后者在極坐標圖上繪制散點圖。
【5x01】方法一:pyplot.scatter() 與 pyplot.polar()
以下用到的 matplotlib.pyplot.scatter() 函數,各參數含義以及支持的其他參數可以參見前文:
-
《Python 數據分析三劍客之 Matplotlib(二):文本描述 / 中文支持 / 畫布 / 網格等基本圖像屬性》
-
《Python 數據分析三劍客之 Matplotlib(五):散點圖的繪制》
【5x02】方法二:pyplot.scatter() 與 pyplot.subplot()
matplotlib.pyplot.subplot() 方法用于添加子圖,如果想要子圖為極坐標圖,則需要指定 projection 參數為 polar,有關此函數的具體介紹可參見官方文檔。其他函數的參數解釋可參考前文:
-
《Python 數據分析三劍客之 Matplotlib(三):圖例 / LaTeX / 刻度 / 子圖 / 補丁等基本圖像屬性》
-
《Python 數據分析三劍客之 Matplotlib(五):散點圖的繪制》
【5x03】方法三:pyplot.scatter() 與 pyplot.axes()
axes 為 Matplotlib 圖像中的繪圖區,matplotlib.pyplot.axes() 方法可以對繪圖區進行設置,同樣的也可以設置 projection 參數為 polar 來實現極坐標圖,設置 polar=True 也行。示例中其他函數的參數解釋可參考前文:
-
《Python 數據分析三劍客之 Matplotlib(一):初識 Matplotlib 與其 matplotibrc 配置文件》
-
《Python 數據分析三劍客之 Matplotlib(五):散點圖的繪制》
【6x00】高級用法:繪制極坐標柱狀圖
和極坐標散點圖的繪制類似,matplotlib.pyplot.polar() 方法可以實現極坐標圖,但僅用這一個函數的話實現的樣式效果并不多,以下介紹另外三種繪制極坐標柱狀圖的方法:
-
matplotlib.pyplot.polar() 和 matplotlib.pyplot.bar() 結合,前者繪制極坐標圖,后者在極坐標圖上繪制柱狀圖;
-
matplotlib.pyplot.subplot() 和 matplotlib.pyplot.bar() 結合,前者添加子圖,其中指定 projection='polar' 即為極坐標圖, 后者在極坐標圖上繪制柱狀圖;
-
matplotlib.pyplot.axes() 與 matplotlib.pyplot.bar() 結合,前者設置繪圖區參數,其中指定 projection='polar' 或 polar=True 即為極坐標圖, 后者在極坐標圖上繪制柱狀圖。
【6x01】方法一:pyplot.bar() 與 pyplot.polar()
以下用到的 matplotlib.pyplot.bar() 函數,各參數含義以及支持的其他參數可以參見前文:
-
《Python 數據分析三劍客之 Matplotlib(二):文本描述 / 中文支持 / 畫布 / 網格等基本圖像屬性》
-
《Python 數據分析三劍客之 Matplotlib(六):直方圖 / 柱狀圖 / 條形圖的繪制》
【6x02】方法二:pyplot.bar() 與 pyplot.subplot()
matplotlib.pyplot.subplot() 方法用于添加子圖,如果想要子圖為極坐標圖,則需要指定 projection 參數為 polar,有關此函數的具體介紹可參見官方文檔。其他函數的參數解釋可參考前文:
-
《Python 數據分析三劍客之 Matplotlib(三):圖例 / LaTeX / 刻度 / 子圖 / 補丁等基本圖像屬性》
-
《Python 數據分析三劍客之 Matplotlib(六):直方圖 / 柱狀圖 / 條形圖的繪制》
【6x03】方法三:pyplot.bar() 與 pyplot.axes()
axes 為 Matplotlib 圖像中的繪圖區,matplotlib.pyplot.axes() 方法可以對繪圖區進行設置,同樣的也可以設置 projection 參數為 polar 來實現極坐標圖,設置 polar=True 也行。示例中其他函數的參數解釋可參考前文:
-
《Python 數據分析三劍客之 Matplotlib(一):初識 Matplotlib 與其 matplotibrc 配置文件》
-
《Python 數據分析三劍客之 Matplotlib(六):直方圖 / 柱狀圖 / 條形圖的繪制》
這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 CSDN,作者 TRHX。 博客首頁:https://itrhx.blog.csdn.net/ 本文鏈接:https://itrhx.blog.csdn.net/article/details/106162412 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!
總結
以上是生活随笔為你收集整理的Python 数据分析三剑客之 Matplotlib(九):极区图 / 极坐标图 / 雷达图的绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过投资可以实现财富自由吗?实现睡后收入
- 下一篇: 买国债逆回购想要收益高,认准几个时间点!