使用Python繪制精美雷達圖
為什么選擇雷達圖
在科研和數(shù)據(jù)分析領(lǐng)域,當我們需要同時展示多個維度的數(shù)據(jù)對比時,傳統(tǒng)的柱狀圖或折線圖往往顯得力不從心。這時候,雷達圖(Radar Chart) 就像一位全能選手,以其獨特的環(huán)形布局,讓多維數(shù)據(jù)的對比變得直觀又美觀。
比如在材料科學(xué)中,我們可能需要同時對比不同合金的屈服強度、抗拉強度、延伸率等多個性能指標。想象一下,當四種不同的鐵基合金材料的七項關(guān)鍵屬性擺在你面前,如何一眼看出它們的優(yōu)勢和短板?雷達圖正是為解決這類問題而生 —— 它用輻射狀的坐標軸代表不同維度,用閉合區(qū)域的面積直觀反映綜合性能,讓數(shù)據(jù)對比瞬間 “立體化”!
代碼解析
下面我們通過一段完整的 Python 代碼,手把手教你繪制材料科學(xué)領(lǐng)域的雷達圖。這段代碼不僅能生成美觀的可視化結(jié)果,還隱藏著許多可以靈活定制的 “彩蛋” 哦~
import numpy as np
import matplotlib.pyplot as plt
# 設(shè)置隨機種子,確保結(jié)果可復(fù)現(xiàn)
np.random.seed(42)
# 定義材料屬性類別(這是可替換的第一處?。?
categories = [
"屈服強度", "極限抗拉強度", "斷裂伸長率",
"UTS×EF", "飽和磁感應(yī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)
}
# 計算雷達圖角度(閉合圓環(huán)的關(guān)鍵?。?
angles = np.linspace(0, 2 * np.pi, N, endpoint=False).tolist()
angles += angles[:1] # 閉合圓環(huán),讓最后一個點連接到第一個點
# 創(chuàng)建畫布
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))
# 設(shè)置坐標軸標簽(維度名稱)
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)
# 定義各材料的樣式(顏色、標記、填充透明度)
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},
}
# 繪制各材料的雷達圖
for label, values in data.items():
vals = values.tolist()
vals += vals[:1] # 閉合數(shù)據(jù)點
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)
# 添加標題
plt.title("材料屬性雷達圖", fontsize=16, y=1.08)
plt.show()
代碼核心模塊拆解
1.數(shù)據(jù)準備:定義維度與數(shù)值
categories 列表:這里定義了雷達圖的每個坐標軸代表的屬性,比如 “屈服強度”“電阻率” 等。用戶替換點:直接修改列表中的字符串,即可適配你的研究領(lǐng)域(比如換成 “市場份額”“用戶滿意度” 等)。
data 字典:鍵是材料名稱,值是對應(yīng)材料在各個維度上的數(shù)值。用戶替換點:刪除隨機生成數(shù)據(jù),改為你的實際數(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ù)...
}注意:每個列表的長度必須與 categories 的長度一致哦~
2.坐標系統(tǒng)構(gòu)建:讓數(shù)據(jù) “轉(zhuǎn)” 起來
angles變量是雷達圖的核心!通過np.linspace生成等角度間隔的坐標,最后用angles += angles[:1]閉合圓環(huán),這樣線條才能形成完整的多邊形。
polar=True參數(shù)是開啟 “極坐標” 模式的關(guān)鍵,它讓 matplotlib 把直線坐標轉(zhuǎn)換為環(huán)形坐標,瞬間賦予數(shù)據(jù) “立體感”~
3.樣式定制:讓圖表顏值飆升
styles字典定義了每種材料的顏色、標記符號和填充透明度。比如"#00b386"是清新的藍綠色,"marker": "v"表示三角形標記。用戶可自定義點:修改顏色值(支持 RGB、十六進制或顏色名稱)、更換標記符號("o"圓、"s"正方形等),甚至調(diào)整填充透明度讓圖表更通透~
網(wǎng)格線、圖例位置、標題字體等細節(jié)都可以通過代碼微調(diào),比如bbox_to_anchor=(1.2, 1.1)讓圖例 “懸浮” 在圖表右側(cè),避免遮擋數(shù)據(jù)。
個性化改造指南
場景一:我的數(shù)據(jù)范圍不是 0-10,怎么辦?
修改plt.ylim(0, 10)中的數(shù)值即可!比如數(shù)據(jù)范圍是 0-100,改為plt.ylim(0, 100),同時調(diào)整plt.yticks的刻度值,讓顯示更清晰。
場景二:想換一套更炫酷的配色?
Matplotlib 支持上百種顏色名稱,也可以用十六進制色碼。比如換成漸變色系:
styles = {
"材料A": {"color": "#ff6b6b", "marker": "o"}, # 珊瑚紅
"材料B": {"color": "#4ecdc4", "marker": "s"}, # 淺青色
"材料C": {"color": "#ffe66d", "marker": "^"}, # 明黃色
}如果追求專業(yè)感,還可以使用科研論文常用的配色方案,比如藍、綠、橙三色搭配~
場景三:維度太多,標簽擠在一起怎么辦?
當categories數(shù)量超過 8 個時,標簽可能會重疊。解決方案:
- 旋轉(zhuǎn)標簽: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))
擴展應(yīng)用:雷達圖不止于材料科學(xué)
雷達圖的適用場景遠比你想象的更廣!只要是多維數(shù)據(jù)對比,它都能大顯身手:
市場分析:競品多維指標對比
- 維度示例:價格競爭力、品牌知名度、用戶口碑、功能豐富度、售后服務(wù)
- 應(yīng)用:一眼看出自家產(chǎn)品與競品的優(yōu)勢短板,為市場策略提供可視化依據(jù)。
個人能力評估:職業(yè)發(fā)展規(guī)劃
- 維度示例:編程能力、溝通能力、項目管理、行業(yè)知識、創(chuàng)新思維
- 應(yīng)用:用雷達圖繪制 “能力圖譜”,直觀發(fā)現(xiàn)技能短板,制定學(xué)習計劃~
農(nóng)業(yè)科研:作物多指標對比
- 維度示例:抗旱性、產(chǎn)量、抗病性、生長周期、營養(yǎng)價值
- 應(yīng)用:幫助育種專家快速篩選優(yōu)質(zhì)品種,比表格數(shù)據(jù)更直觀!
總結(jié)
通過這篇文章,我們不僅學(xué)會了用 Python 繪制精美的材料屬性雷達圖,更深入理解了多維數(shù)據(jù)可視化的核心邏輯。雷達圖的魅力在于:
- 直觀性:閉合區(qū)域面積直接反映綜合性能,無需計算即可對比
- 全面性:同時展示 7-8 個維度毫無壓力,打破傳統(tǒng)圖表的維度限制
- 美觀性:通過顏色、填充、標記的組合,讓科研數(shù)據(jù)也能 “顏值在線”
現(xiàn)在,你只需替換categories和data中的內(nèi)容,就能將這段代碼應(yīng)用到自己的研究或工作中。快去試試吧~ 如果在使用中遇到問題,歡迎在評論區(qū)交流,一起解鎖更多雷達圖的隱藏技巧!
到此這篇關(guān)于使用Python繪制精美雷達圖的文章就介紹到這了,更多相關(guān)Python雷達圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
selenium python 實現(xiàn)基本自動化測試的示例代碼
這篇文章主要介紹了selenium python 實現(xiàn)基本自動化測試的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
使用IronPython把Python腳本集成到.NET程序中的教程
這篇文章主要介紹了使用IronPython把Python腳本集成到.NET程序中的教程,現(xiàn)在剛剛被微軟開源的.NET重新成為業(yè)界熱點、本文介紹了使Python和.NET交互的IronPython,需要的朋友可以參考下2015-03-03
Python實戰(zhàn)之實現(xiàn)簡易的學(xué)生選課系統(tǒng)
又到了小伙伴們最喜歡的python實戰(zhàn)環(huán)節(jié),文中對實現(xiàn)簡易的學(xué)生選課系統(tǒng)作了非常詳細的代碼示例,對正在學(xué)習python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
Python?threading中l(wèi)ock的使用詳解
Lock類是threading中用于鎖定當前線程的鎖定類,本文給大家介紹了Python?threading中l(wèi)ock的使用,需要的朋友可以參考下2022-11-11
urllib和BeautifulSoup爬取維基百科的詞條簡單實例
這篇文章主要介紹了urllib和BeautifulSoup爬取維基百科的詞條簡單實例,具有一定借鑒價值,需要的朋友可以參考下2018-01-01

