這篇文章主要介紹了Python中如何使用matplotlib制作雷達圖進行對比分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設(shè)、成都網(wǎng)站制作與策劃設(shè)計,任縣網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:任縣等地區(qū)。任縣做網(wǎng)站價格咨詢:028-86922220
前言
雷達圖的背景一圈一圈地像雷達,用多邊形來展現(xiàn)數(shù)據(jù)的大小,我認為比較適合用于有多種不同維度的情形,是發(fā)現(xiàn)差距的一種好工具。
其中「持續(xù)性」與學(xué)習(xí)的天數(shù)相關(guān),「學(xué)習(xí)量」與聽課或看書的數(shù)量相關(guān),「筆記」與筆記的數(shù)量和互動相關(guān),「知識分享」與分享轉(zhuǎn)發(fā)的次數(shù)相關(guān),「好奇心」與搜索的次數(shù)和廣度相關(guān)。
從圖中可以看出,在 2020 年的年初,我在筆記方面還比較薄弱,經(jīng)過努力,我做筆記的數(shù)量明顯增加了。
借助雷達圖,我們可以直觀地看到差距,進而通過分析,更好地進行改善。
接下來,我們看看用 matplotlib 畫圖的具體步驟。
首先,導(dǎo)入所需的庫,并設(shè)置中文字體和定義顏色等。
# 導(dǎo)入所需的庫 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.image as image # 正常顯示中文標簽 mpl.rcParams['font.sans-serif'] = ['SimHei'] # 自動適應(yīng)布局 mpl.rcParams.update({'figure.autolayout': True}) # 正常顯示負號 mpl.rcParams['axes.unicode_minus'] = False # 禁用科學(xué)計數(shù)法 pd.set_option('display.float_format', lambda x: '%.2f' % x) # 定義顏色,主色:藍色,輔助色:灰色,互補色:橙色 c = {'藍色':'#00589F', '深藍色':'#003867', '淺藍色':'#5D9BCF', '灰色':'#999999', '深灰色':'#666666', '淺灰色':'#CCCCCC', '橙色':'#F68F00', '深橙色':'#A05D00', '淺橙色':'#FBC171'}
其次,從 Excel 文件中讀取數(shù)據(jù),并定義畫圖用的數(shù)據(jù)。
# 數(shù)據(jù)源路徑 filepath='./data/林驥的學(xué)分構(gòu)成.xlsx' # 讀取 Excel文件 df = pd.read_excel(filepath) # 提取畫圖所需的數(shù)據(jù) data0 = df.iloc[0, 2:].values data1 = df.iloc[1, 2:].values #提取標簽 label = np.array(df.iloc[1, 2:].index) # 根據(jù)分數(shù)添加評級的標簽 for i, d in enumerate(data1): if d > 4: grade = 'A^+' elif d == 4: grade = 'A' elif d > 3: grade = 'B^+' elif d == 3: grade = 'B' else: grade = 'B^-' label[i] += '\n' + r'$\bf{' + grade + '}$' # data 有幾個數(shù)據(jù),就把整圓 360° 分成幾份 angle = np.linspace(0, 2*np.pi, len(data0), endpoint=False) # 增加第一個 angle 到所有 angle 里,以實現(xiàn)閉合 angles = np.concatenate((angle, [angle[0]])) # 倒轉(zhuǎn)順序,以讓雷達圖順時針顯示 angles = angles[::-1] #增加第一個 data 到所有的 data 里,以實現(xiàn)閉合 data0 = np.concatenate((data0, [data0[0]])) data1 = np.concatenate((data1, [data1[0]]))
接下來,開始用「面向?qū)ο蟆沟姆椒ㄟM行畫圖。
# 使用「面向?qū)ο蟆沟姆椒ó媹D,定義圖片的大小 fig, ax=plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True)) # 設(shè)置背景顏色 fig.set_facecolor('w') ax.set_facecolor('w') # 設(shè)置標題 ax.set_title('\n林驥的學(xué)分構(gòu)成及其變化\n\n', fontsize=26, loc='left', color=c['深灰色']) # 設(shè)置網(wǎng)格標簽 ax.set_thetagrids(angles*180/np.pi, labels=label) # 畫雷達圖,用順時針顯示 ax.plot(angles, data0, 'o-', label=df.iloc[0, 0].strftime('%Y-%m-%d')) ax.plot(angles, data1, 'o-', label=df.iloc[1, 0].strftime('%Y-%m-%d')) # 設(shè)置極坐標 0° 的位置 ax.set_theta_zero_location('N') # 設(shè)置顯示的極徑范圍 ax.set_rlim(0, 5) # 填充顏色 ax.fill(angles, data0, facecolor=c['淺藍色'], alpha=0.6) ax.fill(angles, data1, facecolor=c['淺橙色'], alpha=0.6) # 設(shè)置極徑標簽,放在第一象限的中間位置 ax.set_rlabel_position(360-360/len(data0)/2) # 設(shè)置圖例顯示的位置 l = ax.legend(ncol=2, loc='lower center', frameon=False, borderaxespad=-3, fontsize=13) for text in l.get_texts(): text.set_color(c['深灰色']) # text.set_size(13) # 去掉最外圍的黑圈 ax.spines['polar'].set_visible(False) # 設(shè)置坐標標簽字體大小和顏色 ax.tick_params(labelsize=16, colors=c['深灰色']) plt.show()
雷達在展現(xiàn)多個維度的得分或性能方面,效果不錯,在財務(wù)分析和標桿管理中有著廣泛的應(yīng)用。
另外,在一些游戲中,也有用雷達圖來展現(xiàn)人物的能力。
但是,雷達圖也有一些自身的缺點,包括:
(1)如果在一個雷達圖中展現(xiàn)超過 2 組數(shù)據(jù),會讓圖表難以閱讀。
(2)變量的個數(shù)不宜過多,否則密密麻麻的線條可能讓人抓不到重點。
(3)從表達數(shù)據(jù)的精確度來看,極坐標中的角度,不如直角坐標中的位置。
同樣的數(shù)據(jù),不同人得出的觀點可能不一樣,圖表的選擇可能也不一樣,我們通常需要考慮以下幾個因素:
(1)分析提煉的信息;
(2)所屬數(shù)據(jù)的類型;
(3)想要表達的觀點;
(4)想要強調(diào)的信息。
很多人作圖有一種誤區(qū),就是喜歡運用所謂的技巧和創(chuàng)新,做出讓人難以看懂的復(fù)雜圖表,這與圖表的目的背道而馳,是我們應(yīng)該避免的。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Python中如何使用matplotlib制作雷達圖進行對比分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
文章標題:Python中如何使用matplotlib制作雷達圖進行對比分析
文章轉(zhuǎn)載:http://muchs.cn/article26/jsopjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、營銷型網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站策劃、外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)