使用Python繪制精美雷達(dá)圖
為什么選擇雷達(dá)圖
在科研和數(shù)據(jù)分析領(lǐng)域,當(dāng)我們需要同時(shí)展示多個(gè)維度的數(shù)據(jù)對(duì)比時(shí),傳統(tǒng)的柱狀圖或折線圖往往顯得力不從心。這時(shí)候,雷達(dá)圖(Radar Chart) 就像一位全能選手,以其獨(dú)特的環(huán)形布局,讓多維數(shù)據(jù)的對(duì)比變得直觀又美觀。
比如在材料科學(xué)中,我們可能需要同時(shí)對(duì)比不同合金的屈服強(qiáng)度、抗拉強(qiáng)度、延伸率等多個(gè)性能指標(biāo)。想象一下,當(dāng)四種不同的鐵基合金材料的七項(xiàng)關(guān)鍵屬性擺在你面前,如何一眼看出它們的優(yōu)勢(shì)和短板?雷達(dá)圖正是為解決這類問(wèn)題而生 —— 它用輻射狀的坐標(biāo)軸代表不同維度,用閉合區(qū)域的面積直觀反映綜合性能,讓數(shù)據(jù)對(duì)比瞬間 “立體化”!
代碼解析
下面我們通過(guò)一段完整的 Python 代碼,手把手教你繪制材料科學(xué)領(lǐng)域的雷達(dá)圖。這段代碼不僅能生成美觀的可視化結(jié)果,還隱藏著許多可以靈活定制的 “彩蛋” 哦~
import numpy as np import matplotlib.pyplot as plt # 設(shè)置隨機(jī)種子,確保結(jié)果可復(fù)現(xiàn) np.random.seed(42) # 定義材料屬性類別(這是可替換的第一處!) categories = [ "屈服強(qiáng)度", "極限抗拉強(qiáng)度", "斷裂伸長(zhǎng)率", "UTS×EF", "飽和磁感應(yīng)強(qiáng)度", "矯頑力", "電阻率" ] N = len(categories) # 生成四組材料數(shù)據(jù)(這是可替換的第二處?。? data = { "M-MCA": np.random.uniform(5, 10, N), "Fe-49Co-2V": np.random.uniform(2, 8, N), "Fe-78.5Ni": np.random.uniform(1, 6, N), "Fe-4Si": np.random.uniform(1, 9, N) } # 計(jì)算雷達(dá)圖角度(閉合圓環(huán)的關(guān)鍵?。? angles = np.linspace(0, 2 * np.pi, N, endpoint=False).tolist() angles += angles[:1] # 閉合圓環(huán),讓最后一個(gè)點(diǎn)連接到第一個(gè)點(diǎn) # 創(chuàng)建畫布 fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True)) # 設(shè)置坐標(biāo)軸標(biāo)簽(維度名稱) plt.xticks(angles[:-1], categories, fontsize=12, fontweight='bold') # 設(shè)置徑向刻度(數(shù)值范圍) ax.set_rlabel_position(0) plt.yticks([2, 4, 6, 8, 10], ["2", "4", "6", "8", "10"], color="grey", size=10) plt.ylim(0, 10) # 定義各材料的樣式(顏色、標(biāo)記、填充透明度) styles = { "M-MCA": {"color": "#00b386", "marker": "v", "alpha_fill": 0.25}, "Fe-49Co-2V": {"color": "dimgray", "marker": "o", "alpha_fill": 0.3}, "Fe-78.5Ni": {"color": "salmon", "marker": "^", "alpha_fill": 0.3}, "Fe-4Si": {"color": "gold", "marker": "s", "alpha_fill": 0.3}, } # 繪制各材料的雷達(dá)圖 for label, values in data.items(): vals = values.tolist() vals += vals[:1] # 閉合數(shù)據(jù)點(diǎn) style = styles[label] ax.plot(angles, vals, color=style["color"], linewidth=2, marker=style["marker"], label=label) ax.fill(angles, vals, color=style["color"], alpha=style["alpha_fill"]) # 填充區(qū)域 # 自定義網(wǎng)格樣式 ax.grid(color='grey', linestyle='--', linewidth=0.5) # 添加圖例(位置可調(diào)整) plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1.1), fontsize=12) # 添加標(biāo)題 plt.title("材料屬性雷達(dá)圖", fontsize=16, y=1.08) plt.show()
代碼核心模塊拆解
1.數(shù)據(jù)準(zhǔn)備:定義維度與數(shù)值
categories 列表:這里定義了雷達(dá)圖的每個(gè)坐標(biāo)軸代表的屬性,比如 “屈服強(qiáng)度”“電阻率” 等。用戶替換點(diǎn):直接修改列表中的字符串,即可適配你的研究領(lǐng)域(比如換成 “市場(chǎng)份額”“用戶滿意度” 等)。
data 字典:鍵是材料名稱,值是對(duì)應(yīng)材料在各個(gè)維度上的數(shù)值。用戶替換點(diǎn):刪除隨機(jī)生成數(shù)據(jù),改為你的實(shí)際數(shù)據(jù)!比如:
data = { "鋁合金": [8.5, 9.0, 7.2, 6.8, 4.5, 3.2, 5.1], "鈦合金": [7.8, 8.2, 6.5, 7.0, 5.5, 4.0, 3.8], # 更多材料數(shù)據(jù)... }
注意:每個(gè)列表的長(zhǎng)度必須與 categories 的長(zhǎng)度一致哦~
2.坐標(biāo)系統(tǒng)構(gòu)建:讓數(shù)據(jù) “轉(zhuǎn)” 起來(lái)
angles變量是雷達(dá)圖的核心!通過(guò)np.linspace生成等角度間隔的坐標(biāo),最后用angles += angles[:1]閉合圓環(huán),這樣線條才能形成完整的多邊形。
polar=True參數(shù)是開(kāi)啟 “極坐標(biāo)” 模式的關(guān)鍵,它讓 matplotlib 把直線坐標(biāo)轉(zhuǎn)換為環(huán)形坐標(biāo),瞬間賦予數(shù)據(jù) “立體感”~
3.樣式定制:讓圖表顏值飆升
styles字典定義了每種材料的顏色、標(biāo)記符號(hào)和填充透明度。比如"#00b386"是清新的藍(lán)綠色,"marker": "v"表示三角形標(biāo)記。用戶可自定義點(diǎn):修改顏色值(支持 RGB、十六進(jìn)制或顏色名稱)、更換標(biāo)記符號(hào)("o"圓、"s"正方形等),甚至調(diào)整填充透明度讓圖表更通透~
網(wǎng)格線、圖例位置、標(biāo)題字體等細(xì)節(jié)都可以通過(guò)代碼微調(diào),比如bbox_to_anchor=(1.2, 1.1)讓圖例 “懸浮” 在圖表右側(cè),避免遮擋數(shù)據(jù)。
個(gè)性化改造指南
場(chǎng)景一:我的數(shù)據(jù)范圍不是 0-10,怎么辦?
修改plt.ylim(0, 10)中的數(shù)值即可!比如數(shù)據(jù)范圍是 0-100,改為plt.ylim(0, 100),同時(shí)調(diào)整plt.yticks的刻度值,讓顯示更清晰。
場(chǎng)景二:想換一套更炫酷的配色?
Matplotlib 支持上百種顏色名稱,也可以用十六進(jìn)制色碼。比如換成漸變色系:
styles = { "材料A": {"color": "#ff6b6b", "marker": "o"}, # 珊瑚紅 "材料B": {"color": "#4ecdc4", "marker": "s"}, # 淺青色 "材料C": {"color": "#ffe66d", "marker": "^"}, # 明黃色 }
如果追求專業(yè)感,還可以使用科研論文常用的配色方案,比如藍(lán)、綠、橙三色搭配~
場(chǎng)景三:維度太多,標(biāo)簽擠在一起怎么辦?
當(dāng)categories數(shù)量超過(guò) 8 個(gè)時(shí),標(biāo)簽可能會(huì)重疊。解決方案:
- 旋轉(zhuǎn)標(biāo)簽:plt.xticks(angles[:-1], categories, fontsize=10, rotation=45)
- 減少維度數(shù)量,或用縮寫代替全稱(比如 “UTS” 代替 “Ultimate Tensile Strength”)
- 增大畫布尺寸:fig, ax = plt.subplots(figsize=(10, 10), subplot_kw=dict(polar=True))
擴(kuò)展應(yīng)用:雷達(dá)圖不止于材料科學(xué)
雷達(dá)圖的適用場(chǎng)景遠(yuǎn)比你想象的更廣!只要是多維數(shù)據(jù)對(duì)比,它都能大顯身手:
市場(chǎng)分析:競(jìng)品多維指標(biāo)對(duì)比
- 維度示例:價(jià)格競(jìng)爭(zhēng)力、品牌知名度、用戶口碑、功能豐富度、售后服務(wù)
- 應(yīng)用:一眼看出自家產(chǎn)品與競(jìng)品的優(yōu)勢(shì)短板,為市場(chǎng)策略提供可視化依據(jù)。
個(gè)人能力評(píng)估:職業(yè)發(fā)展規(guī)劃
- 維度示例:編程能力、溝通能力、項(xiàng)目管理、行業(yè)知識(shí)、創(chuàng)新思維
- 應(yīng)用:用雷達(dá)圖繪制 “能力圖譜”,直觀發(fā)現(xiàn)技能短板,制定學(xué)習(xí)計(jì)劃~
農(nóng)業(yè)科研:作物多指標(biāo)對(duì)比
- 維度示例:抗旱性、產(chǎn)量、抗病性、生長(zhǎng)周期、營(yíng)養(yǎng)價(jià)值
- 應(yīng)用:幫助育種專家快速篩選優(yōu)質(zhì)品種,比表格數(shù)據(jù)更直觀!
總結(jié)
通過(guò)這篇文章,我們不僅學(xué)會(huì)了用 Python 繪制精美的材料屬性雷達(dá)圖,更深入理解了多維數(shù)據(jù)可視化的核心邏輯。雷達(dá)圖的魅力在于:
- 直觀性:閉合區(qū)域面積直接反映綜合性能,無(wú)需計(jì)算即可對(duì)比
- 全面性:同時(shí)展示 7-8 個(gè)維度毫無(wú)壓力,打破傳統(tǒng)圖表的維度限制
- 美觀性:通過(guò)顏色、填充、標(biāo)記的組合,讓科研數(shù)據(jù)也能 “顏值在線”
現(xiàn)在,你只需替換categories和data中的內(nèi)容,就能將這段代碼應(yīng)用到自己的研究或工作中??烊ピ囋嚢伞?如果在使用中遇到問(wèn)題,歡迎在評(píng)論區(qū)交流,一起解鎖更多雷達(dá)圖的隱藏技巧!
到此這篇關(guān)于使用Python繪制精美雷達(dá)圖的文章就介紹到這了,更多相關(guān)Python雷達(dá)圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django原生sql也能使用Paginator分頁(yè)的示例代碼
這篇文章主要介紹了Django原生sql也能使用Paginator分頁(yè)的示例代碼,主要使用了count和__getslice__,有興趣的可以了解一下2017-11-11使用Python進(jìn)行SSH和文件傳輸實(shí)現(xiàn)方法實(shí)例
這篇文章主要為大家介紹了使用Python進(jìn)行SSH和文件傳輸實(shí)現(xiàn)方法實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12解決python3.x安裝numpy成功但import出錯(cuò)的問(wèn)題
這篇文章主要介紹了解決python3.x安裝numpy成功但import出錯(cuò)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Opencv實(shí)現(xiàn)眼睛控制鼠標(biāo)的實(shí)踐
本文主要介紹了Opencv實(shí)現(xiàn)眼睛控制鼠標(biāo)的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02