Matplotlib實戰(zhàn)之玫瑰圖繪制詳解
南丁格爾玫瑰圖是一種用極坐標下的柱狀圖或堆疊柱狀圖來展示數(shù)據(jù)的圖表。
雖然南丁格爾玫瑰圖外觀類似餅圖,但是表示數(shù)據(jù)的方式不同,它是以半徑來表示數(shù)值的,而餅圖是以扇形的弧度來表達數(shù)據(jù)的。
所以,南丁格爾玫瑰圖在視覺上會夸大數(shù)據(jù)的比例,因為半徑和面積之間是平方關系。
因此,當需要對比非常相近的數(shù)值時,適當?shù)目浯笥兄趨^(qū)分數(shù)據(jù),但在追求數(shù)據(jù)準確性時,玫瑰圖可能不是最佳選擇。
據(jù)說,南丁格爾玫瑰圖由統(tǒng)計學家和醫(yī)學改革家佛羅倫薩?南丁格爾在克里米亞戰(zhàn)爭期間創(chuàng)造,用于反映軍醫(yī)院的季節(jié)性死亡率,從而推動醫(yī)院條件的改善。
1. 主要元素
南丁格爾玫瑰圖的主要元素包括:
- 扇形:每個扇形代表一個類別或分組,其面積大小表示該類別或分組的數(shù)值大小。
- 半徑軸:扇形的半徑表示數(shù)據(jù)的大小,半徑越長表示數(shù)值越大。
- 圖例:圖例是餅圖的一部分,用于解釋每個餅片所代表的含義,幫助觀察者理解圖表。
- 標簽:可在每個扇形上方或內(nèi)部添加標簽,標注該類別或分組的名稱或數(shù)值,幫助人們更好地理解數(shù)據(jù)。

2. 適用的場景
南丁格爾玫瑰圖適用的場景包括:
- 數(shù)據(jù)分布比較:比較不同類別或分組之間的數(shù)據(jù)分布情況,例如比較不同產(chǎn)品的銷售量或不同地區(qū)的人口分布。
- 百分比展示:展示各類別或分組所占的百分比大小,特別適用于展示相對比例的數(shù)據(jù)。
- 強調(diào)特定數(shù)據(jù):通過扇形的面積和顏色等元素使其更加顯眼和易于被注意到。
- 增強視覺吸引力:南丁格爾玫瑰圖具有獨特的視覺效果,可以吸引觀眾的注意力,適用于需要突出表達的場合。
3. 不適用的場景
南丁格爾玫瑰圖不適用的場景包括:
- 連續(xù)數(shù)據(jù)分布:南丁格爾玫瑰圖適用于展示離散的數(shù)據(jù)分布情況,不適用于展示連續(xù)數(shù)據(jù)的分布情況,例如時間序列數(shù)據(jù)。
- 多變量比較:如果需要比較多個變量之間的關系,南丁格爾玫瑰圖可能不夠直觀和有效。
- 大量數(shù)據(jù)展示:如果數(shù)據(jù)量過大,可能會導致扇形過小,難以辨認和理解。
- 數(shù)據(jù)精確度要求高:南丁格爾玫瑰圖的可視化效果更多地強調(diào)數(shù)據(jù)分布的趨勢和相對大小,不適合展示具有高精確度要求的數(shù)據(jù)。
4. 分析實戰(zhàn)
本次使用 王者榮耀KPL 2023年春季賽的數(shù)據(jù),分析各個戰(zhàn)隊的排名和勝率。
4.1. 數(shù)據(jù)來源
數(shù)據(jù)來自王者榮耀官方網(wǎng)站,整理好的數(shù)據(jù)下載地址:databook.top/wzry/2023-spring
本次分析使用其中 各個戰(zhàn)隊的相關數(shù)據(jù):league-2023春季賽.csv
fp = "d:/share/data/league-2023春季賽.csv" df = pd.read_csv(fp) df

4.2. 數(shù)據(jù)清理
原始數(shù)據(jù)中,字段比較多,提取前10名的戰(zhàn)隊,用南丁格爾玫瑰圖分析其勝率情況。
key = "勝率"
data = df.sort_values("排名")
data = data.reset_index()
#提取前10名,只保留 戰(zhàn)隊 和 勝率 2個字段
data = data.loc[:9, ["戰(zhàn)隊", key]]
#勝率字段轉換為 float 類型
data[key] = data[key].str.replace("%", "")
data[key] = data[key].astype("float")
data
4.3. 分析結果可視化
matplotlib 中沒有提供專門繪制南丁格爾玫瑰圖的接口,我們可以用極坐標系下的柱狀圖來模擬。
with plt.style.context("seaborn-v0_8"):
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 1, 1], polar=True)
ax.set_theta_offset(np.pi/2)
ax.set_theta_direction(-1)
ax.set_rlabel_position(0)
n = len(data)
# 每個數(shù)據(jù)的角度
angle = np.linspace(0, 2 * np.pi, n, endpoint=False)
# 繪制用到的數(shù)據(jù)
radius = np.array(data[key].tolist())
ax.yaxis.set_major_locator(plt.NullLocator())
# x軸刻度顯示戰(zhàn)隊名稱
ax.set_xticks(angle, data["戰(zhàn)隊"])
# 中間空出一個孔
ax.set_ylim(-10, max(data[key]))
ax.bar(angle, radius, color=plt.cm.tab10.colors, width=0.62)
從分析結果可以看出,第一名重慶狼隊的勝率明顯高出其他的戰(zhàn)隊,而其他戰(zhàn)隊的勝率差別不大。
說明目前 王者榮耀KPL聯(lián)盟中,各個戰(zhàn)隊的實力比較接近,比賽會非常精彩。
到此這篇關于Matplotlib實戰(zhàn)之玫瑰圖繪制詳解的文章就介紹到這了,更多相關Matplotlib玫瑰圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python threading.local代碼實例及原理解析
這篇文章主要介紹了Python threading.local代碼實例及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
Python?Flask-Login構建強大的用戶認證系統(tǒng)實例探究
這篇文章主要為大家介紹了Python?Flask-Login構建強大的用戶認證系統(tǒng)示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
利用python將json數(shù)據(jù)轉換為csv格式的方法
下面小編就為大家分享一篇利用python將json數(shù)據(jù)轉換為csv格式的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
Python無法用requests獲取網(wǎng)頁源碼的解決方法
爬蟲獲取信息,很多時候是需要從網(wǎng)頁源碼中獲取鏈接信息的,下面這篇文章主要給大家介紹了關于Python無法用requests獲取網(wǎng)頁源碼的解決方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07

