
簡介本資源是一套開箱即用的Matlab電機MAP繪制程序面向電機控制工程師、電驅動系統研發人員及高校相關方向研究生解決實際項目中電機效率、轉矩、電流等多維性能數據難以高效可視化的問題。壓縮包共3個文件116KB包含核心Matlab腳本.m用于自動讀取與插值繪圖、Excel格式的原始MAP數據表.xlsx便于替換自定義測試數據、以及生成的高分辨率效率熱力圖示例.png供效果參考。已有196人學習下載腳本已適配多種常見電機數據結構支持surf三維曲面、contour等高線、fill填充等多種繪圖模式無需修改即可繪制轉速-轉矩平面下的效率/損耗/電流分布圖并內置坐標軸標注、色條標定、插值平滑等工程實用功能顯著降低MAP圖從數據到圖表的實現門檻。 搞電機或者電驅系統的人日常打交道最多的圖除了那些時間軸上的波形曲線恐怕就是這張“轉速-轉矩-效率”的MAP圖了。剛入行那陣子我拿到臺架測試返回的一大堆數據點用scatter散點圖糊弄了幾版結果被做系統匹配的同事吐槽說“你這圖沒法看效率區域糊成一團根本沒法對比方案”。后來痛定思痛仔細把Matlab繪圖的底層邏輯捋了一遍寫了一套通用繪制程序。這篇就把這套程序的設計思路和完整實現拆開講清楚尤其是怎么讓同一套代碼不僅能畫電機MAP還能秒切到電池內阻MAP、逆變器損耗MAP這些亂七八糟的二維數據場。1. 先搞清楚電機MAP圖的本質一張圖背后是三個維度的數據我見過不少新手拿到電機MAP圖時的第一反應這不就是個漂亮的彩色云圖嗎確實視覺上它像個云圖但如果你只把它當云圖畫那大概率畫出來的東西只是“好看”而無法承載工程判斷。電機MAP圖在工程上有個更嚴謹的名字叫效率等高線圖或效率云圖本質上是用二維平面上的顏色變化來表達第三個維度的數值大小。1.1 MAP圖的數據結構別再把XYZ散點直接懟進繪圖函數具體到Matlab里電機MAP圖的標準數據形態是X軸為轉速通常單位是rpm也有用rad/s的Y軸為轉矩單位是Nm平面上每一個坐標點對應一個效率值0到1或者0到100%。這里有個非常容易踩的坑。如果你從試驗臺架直接讀取數據得到的一般是類似下面這種的表格式散點數據轉速(rpm)轉矩(Nm)效率(%)1000082.310002088.510004090.12000080.220002091.4這種表格式的離散點數據直接plot或scatter是畫不出“面”的效果的。你真正需要的是一個二維矩陣行對應轉矩、列對應轉速或者反過來也行矩陣里的值才是效率。換句話說散點數據必須先插值網格化變成類似轉速向量 R [1000, 2000, 3000, 4000, 5000]; 轉矩向量 T [0, 20, 40, 60, 80, 100]; 效率矩陣 E [82.3, 80.2, ...; 88.5, 91.4, ...;]這種矩陣格式Matlab的pcolor、contourf、imagesc這類函數才能直接吃進去。1.2 為什么“完美繪制任何類型的數據”這個目標值得追求標題里寫了“完美繪制任何類型的數據”這句不是噱頭。電驅動系統開發過程中需要畫這種二維色圖的地方多得超乎想象電機效率MAP轉速×轉矩×效率最經典的一張圖看高效區是否覆蓋主工況區。電機損耗MAP轉速×轉矩×總損耗銅耗鐵耗機械損耗做散熱分析和峰值能力判斷用。電池內阻MAPSOC×溫度×內阻BMS策略標定時必看低溫低SOC時內阻會飆升直接影響放電功率限制。逆變器損耗MAP轉速×轉矩×IGBT損耗配合電機損耗可以算系統級效率。NVH噪音MAP轉速×轉矩×聲壓級或者階次幅值做噪音優化時用往往要求很高的分辨率。這些圖的物理含義天差地別但落到繪圖層面數據結構卻幾乎完全一致——都是X軸向量、Y軸向量、Z值二維矩陣。所以只要把這套數據規范定義好一套繪圖程序完全可以通吃。我個人寫這套程序時定的目標是輸入轉速向量、轉矩向量和效率矩陣輸出一張“能直接貼進技術報告”的圖。也就是說坐標軸刻度要科學、顏色條要明確、等效率線要清晰、外特性邊界要體現最好還能一鍵切換顯示模式。2. 數據輸入的坑三分畫圖七分數據整理寫繪圖程序之前最需要花心思設計的其實是“如何把數據整理成程序能直接接收的格式”。實測中來自臺架、仿真、整車實測的數據格式千變萬化如果不做預處理繪圖代碼里就得塞一堆條件分支既不優雅也容易出bug。2.1 三種典型輸入格式的統一坐標軸策略我最終把輸入格式統一成了三種模式分別對應不同來源的數據在程序開頭做一個標準化預處理模式A完整矩陣輸入。數據本身就是網格化的轉速向量R、轉矩向量T、效率矩陣Esize為length(T)×length(R)齊全。這種情況最容易直接繪圖即可。模式B散點列表輸入。從試驗數據文件讀出來的是三列長數據每行對應一個工況點轉速、轉矩、效率工況點可能覆蓋不全甚至沒有覆蓋完整網格。這種情況必須做網格重建和插值。模式C矩陣行列坐標輸入。部分數據采集系統導出的是完整矩陣但只附帶起始值、步長等坐標信息。比如轉速從500rpm到10000rpm步長500rpm共20個點轉矩從-100Nm到300Nm步長50rpm共9行需要用linspace或冒號運算符生成坐標向量再拼接。模式B比較關鍵這里放一個我實際在用的散點轉網格的代碼片段function [R_grid, T_grid, E_grid] map_data_prepare(R_raw, T_raw, E_raw, R_vec, T_vec, method) % 將散點數據映射到規則網格 % R_raw: 散點轉速數據 (N×1) % T_raw: 散點轉矩數據 (N×1) % E_raw: 散點效率數據 (N×1) % R_vec: 目標轉速網格向量 (1×M) % T_vec: 目標轉矩網格向量 (1×K) % method: 插值方法linear / nearest / cubic [R_grid, T_grid] meshgrid(R_vec, T_vec); % 注意scatteredInterpolant要求輸入為列向量 F scatteredInterpolant(R_raw(:), T_raw(:), E_raw(:), method, linear); % 外插值設置成NaN避免外特性邊界外出現虛假數據 F.ExtrapolationMethod none; E_grid F(R_grid, T_grid); % 將沒有數據的區域外特性以外設為NaN避免畫出色塊 E_grid(isnan(E_grid)) NaN; endscatteredInterpolant是處理這種散點數據最順手的工具比老版的griddata在性能和可控性上都強出一截。有一點值得注意外插值一定要設成none。如果保留默認的線性外插那些沒測到的高速大轉矩區域會被插值出一些假效率值畫進圖里就會出現遠超實際范圍的異常色塊。2.2 轉速和轉矩軸的網格梯度設計很多人在繪制MAP圖時忽略了一個細節——電機臺架測試的轉速點和轉矩點往往不是均勻分布的。比如低速工況點密一些高速稀疏一些轉矩在小轉矩區密一些大轉矩區稀疏一些。直接用原始測試點做網格pcolor畫出來的格子會寬窄不一色塊邊緣參差不齊。我的做法是從原始測試數據里抽取唯一的轉速值、轉矩值升序排列作為目標網格。不額外插值加密。比如測試有21個轉速點、19個轉矩點生成的效率矩陣就是19×21每個格子代表真實測試區域邊界清晰。這樣畫出的圖不會因為過度插值而“顯得精度很高”但它忠實反映了原始數據密度。另外網格要做“邊緣補點”否則pcolor的色塊邊界會縮進一圈。pcolor的色塊本質上畫的是網格單元如果直接用測得的離散值畫邊緣那半個格子是被截斷的。解決辦法是在轉速和轉矩向量的首尾各補一個虛擬點值可以取相鄰點的值或者干脆取相鄰點的外推值。% 邊緣補點 R_plot [R_vec(1) - (R_vec(2)-R_vec(1)), R_vec, R_vec(end) (R_vec(end)-R_vec(end-1))]; T_plot [T_vec(1) - (T_vec(2)-T_vec(1)), T_vec, T_vec(end) (T_vec(end)-T_vec(end-1))]; % 對應補兩行兩列的數據這一步雖然看起來簡單但沒有它圖片邊緣就會有一條明顯的“白邊”貼到報告里特別掉檔次。3. 選對繪圖函數與配色pcolor、contourf、imagesc到底該用哪個Matlab里能畫二維色圖的函數不少imagesc、imagesc、pcolor、contourf、surf都能干這事但每個函數的行為差異是實打實的。選錯函數輕則圖難看重則數據表達失真。這里把我用下來的經驗按場景對比一下。3.1 pcolor是電機MAP繪制的首選原因pcolor的邏輯是“以網格點為中心把相鄰點用色塊填充”。它天然適配電機MAP這類數據——每個網格點都有真實的物理測量或仿真計算值色塊邊界恰好就是試驗工況點的邊界。跟contourf相比pcolor不會對數據做任何光滑或重建是“所見即所得”。但pcolor有兩個經典副作用默認帶網格線尤其當網格點很多時色塊之間會出現白色細線視覺上亂。解決辦法是設shading interp對顏色做插值或shading flat去掉網格線。邊緣截斷前面提到的需要邊緣補點。我的做法是直接用pcolor(R_plot, T_plot, E_plot)然后緊跟一句shading interp。這樣輸出平滑無網格線顏色過渡自然。figure; h pcolor(R_plot, T_plot, E_plot); set(h, EdgeColor, none); shading interp;shading interp會對每個網格單元做雙線性顏色插值出來的視覺效果比shading flat細膩很多尤其適合效率MAP這種漸變數據。3.2 等效率線的疊加邏輯與層級控制光有云圖還不夠工程上還要疊等效率線。比如判斷95%高效區的邊界在哪、高效區是否覆蓋常用巡航工況這時候就需要contour疊加在pcolor之上。contour和contourf的選擇邏輯要分清contourf畫的是填充等高線如果疊在pcolor上它會用色塊覆蓋掉底下的云圖除非設透明度否則會遮住底層信息一般不用于疊加場景。contour只畫線條不填充適合疊加在pcolor上。我的標準做法是hold on; [C, hContour] contour(R_vec, T_vec, E_grid, [80, 85, 90, 92, 94, 95, 96], k, LineWidth, 0.8); clabel(C, hContour, FontSize, 8, Color, [0.3 0.3 0.3], LabelSpacing, 250);clabel是自動標注等高線數值的函數LabelSpacing參數控制標注沿曲線的間隔單位是點。我設250左右標注不會太密也不會太疏。等高線的線條顏色用黑色線寬0.8既不喧賓奪主又能清晰讀值。如果你覺得全黑線條太沉悶也可以用深灰色。3.3 配色方案決定圖的“可讀性”這幾個colormap值得反復用電機MAP這類的數據配色方案是有講究的。默認的parula比較均衡藍到黃但從工程閱讀習慣來說我更偏向用jet系列加限制或者用新版Matlab推薦的turbo。turboMatlab R2020b之后的turbo色圖顏色分布均勻視覺上比jet柔和高亮區域不刺眼。作為效率MAP的默認選擇沒問題。jet經典彩虹色紅橙黃綠青藍紫從低到高直覺對應“冷到熱”。但jet有個毛病——顏色亮度不單調紅和藍兩端亮度反而高中間綠色亮度低人眼對顏色的感知不均勻。做報告用jet會被視覺設計師吐槽如果你只給自己看倒是無所謂。parulaMatlab默認色圖藍黃漸變色覺障礙人士也能分辨。但用在效率MAP上藍色低效率區域和黃色高效率區域對比度偏弱尤其在投影上看不清晰。我測試下來最適合電機效率MAP的是雙色拼接colormap高效率區用紅色系紅-橙-黃低效率區用藍色系深藍-淺藍中間白色過渡。這種配色在工程報告里辨識度極高。實際實現是用colormap函數拼接兩個色彩空間或者用ColorThreshold做一個自定義色圖。% 自定義雙色colormap白-藍漸變 白-紅漸變 cmap_blue [linspace(1, 0.2, 64), linspace(1, 0.4, 64), linspace(1, 0.8, 64)]; cmap_red [linspace(1, 0.9, 64), linspace(0.8, 0.2, 64), linspace(0.8, 0.2, 64)]; cmap [cmap_blue; cmap_red(2:end, :)]; colormap(cmap);這段代碼的意思是前半段從純白漸變到深藍色后半段從純白漸變到深紅色。這樣效率從低到高顏色由藍變白再變紅中間白區分明一眼就能看出高效區。這個配色我用了很久貼到任何報告里都顯得專業。4. 一套代碼畫出“任何類型的數據”從電機MAP到電池、NVH數據的通用化設計寫一套程序最忌“畫死了”——就是代碼只適配電機效率數據換個數據源就要大改。所以在設計階段就要想好通用化策略。我這套程序的接口參數如下基本做到了數據類型無關。4.1 通用繪圖函數的接口設計function hFig plot_map_2d(R_vec, T_vec, Z_mat, varargin) % 通用二維色圖繪制MAP圖 % 輸入參數 % R_vec - X軸坐標向量例如轉速 % T_vec - Y軸坐標向量例如轉矩 % Z_mat - Z值矩陣維度為 length(T_vec)×length(R_vec) % 可選參數Name-Value形式 % zlabel : Z軸標簽默認 Z % xlabel : X軸標簽默認 X % ylabel : Y軸標簽默認 Y % title : 圖標題默認空 % levels : 等高線層級向量默認 [80 85 90 92 94 95 96] % clabel : 是否顯示等高線標注默認 true % cmap : colormap名稱或自定義矩陣默認 turbo % nan_color: 數據為NaN區域的填充顏色默認 [1 1 1] % xscale : linear 或 log默認 linear % mask_threshold : 低于該閾值的區域置為NaN可選項這里想重點說的是mask_threshold參數的設計。電機MAP圖里轉矩為零附近或外特性邊界外實際上沒有穩態工況點這些區域往往是插值出的“空數據”。如果你不做遮蓋圖上會出現一大片低效率的藍色甚至影響色標的自動范圍。所以我在通用接口里加了閾值遮蓋功能效率低于某個值時把對應位置設置為NaN繪圖時自動變成白色或指定顏色。這樣畫出來的圖只顯示有效工況區干凈利落。4.2 數據規范化自動識別數據的“真實范圍”避免色標誤導imagesc和pcolor都能自動根據數據的最大最小值映射顏色但這里有個大坑——如果數據里有幾個離群異常點比如某個工況點的效率因為傳感器跳變顯示成120%整個色標范圍會被拉大導致正常區域的顏色對比度被嚴重壓縮。我的通用程序在繪圖中加入了兩個處理邏輯物理范圍截斷。比如效率數據把超過100%的值硬截斷為100%把低于0%的硬截斷為0%。這個操作在物理上是合理的因為效率不可能超出這個范圍。色標范圍可調。通過caxis新版用clim把色標范圍固定在用戶指定的區間內。比如渲染效率圖時我通常把色標范圍設在50到100之間低于50的統統一片藍。這樣高效區與低效區的色差能拉到最大讀圖效率明顯提升。% 數據規范化以效率為例 Z_mat(Z_mat 100) 100; Z_mat(Z_mat 0) 0; % 設置色標范圍 clim([50, 100]);4.3 從效率MAP到損耗MAP同一套代碼的完整切換這套通用程序我實際用過的場景包括電機效率MAP、電機損耗MAP、電池內阻MAPSOC-溫度平面、逆變器IGBT損耗MAP、減速器效率MAP甚至還有座椅加熱的溫升云圖。每種的差異只在坐標標簽、色標專業著色的含義、以及色標范圍。比如畫電池內阻MAP時X軸不是轉速而是SOC荷電狀態Y軸是溫度Z軸是內阻值mΩ我只需要改一下函數調用的標簽和色標范圍代碼主體完全不用動。反過來畫電機損耗MAP時Z值是損耗功率單位kW數值越小越好那就要把色標范圍倒過來設或者把colormap翻轉方向。通用化的核心收益是你只需要維護一份經過充分測試的繪圖代碼質量穩定可靠換數據源時不用重新畫一遍、重新調一遍格式。對于經常要出圖寫報告的人來說這能省下大量時間。5. 高級美化技巧外特性曲線、色標設置和圖片導出基礎MAP圖畫出來了但要讓它達到“直接上傳到系統、直接投進PPT”的水平還得加幾個工程上的“定制化”元素。其中最重要的就是電機外特性曲線的疊加和色標設計。5.1 外特性曲線疊加讓轉速-轉矩工作區邊界清晰可見電機MAP圖通常都要疊外特性曲線。外特性曲線是指電機在不同轉速下能輸出的最大轉矩峰值轉矩是電機工作區域的物理邊界。沒有這條線光看圖你會以為整個矩形區域內電機都能正常工作但實際上矩形區域的左上角高轉矩低轉速和右下角高轉速低轉矩往往是不允許運行的。疊加方法很簡單前提是你要有外特性數據轉速序列和對應轉矩上限然后直接plot上去% 外特性曲線數據示例峰值轉矩曲線 R_ext [0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000]; T_ext [300, 300, 300, 300, 280, 240, 200, 160, 130, 100, 70]; hold on; plot(R_ext, T_ext, k-, LineWidth, 2.5); plot(R_ext, -T_ext, k-, LineWidth, 2.5); % 電動工況和發電工況對稱 hold off;如果你的電機有發電工況轉矩為負就畫負轉矩外特性。有時候還要疊加峰值功率限制曲線雙曲線形狀同樣用plot畫上去就行。外特性曲線的線寬設置成2.5比等高線更粗主次分明。5.2 色標與刻度別讓colorbar的數值“完全自動”colorbar是MAP圖的靈魂但顏色條上顯示的內容往往被很多人忽略。默認的colorbar顯示的刻度是線性分布的但效率圖的色標從50到100只有50個單位的跨度Matlab自動會切成5個刻度50、60、70、80、90、100。看起來還行但如果你想強調95%以上是高效區建議手動指定刻度。更精細的做法是在colorbar上用一條黑色橫線或者用text標注出關鍵閾值比如“95%高效區”。% 手動控制colorbar cb colorbar; cb.Label.String 效率(%); cb.Label.FontSize 10; % 設置刻度到指定數值 cb.Ticks [55, 60, 65, 70, 75, 80, 85, 90, 92, 94, 95, 96, 97]; cb.TickLabels {55,60,65,70,75,80,85,90,92,94,95,96,97};另一個實用技巧是給色標設置“非線性映射”。比如效率數據集中分布在85到97之間如果你線性映射到色標上這個區間的顏色過渡不夠明顯。可以用pcolor里傳入一個經過非線性拉伸的Z值矩陣來繪圖但把刻度標簽還原成真實值。這樣能夸大關注區間的顏色變化不過做這種圖時要格外小心如果看圖的人不知道坐標是非線性映射的會誤讀數據所以我在實際報告中一般不用除非特別說明。5.3 圖形導出直接輸出高清圖片避免另存為時畫質縮水在Matlab里畫完圖很多人喜歡直接點figure窗口的“保存”這樣出來的圖清晰度往往不夠尤其是往Word或PPT里貼的時候會出現毛邊與鋸齒。我推薦的導出方案是% 設置導出尺寸與分辨率 set(gcf, PaperPositionMode, auto); set(gcf, Position, [100 100 800 600]); print(gcf, 圖1_電機效率MAP.png, -dpng, -r300);-r300指定DPI為300做印刷或高清匯報足夠了。如果你想要矢量圖以備后續在矢量編輯軟件中加工就用-depsc或-dsvg。注意導出之前在figure窗口里先set(gcf,Color,w)把背景設為白色否則默認淺灰色背景會留一圈難看的邊框。6. 邊界問題與異常數據處理畫出“干凈圖”的最后一道防線到這里繪制主流程已經完整了但還有一類問題幾乎每個用過我這套程序的人都會遇到——異常數據的處理。這部分單獨拿出來說因為處理不好會直接影響成圖質量甚至誤導決策。6.1 測試數據里的“坑點”空值、跳變值、超界值怎么辦臺架實測的MAP數據里經常會出現三類臟數據空值NaN。由于測點缺失、傳感器故障或者外特性邊界外區域未測量數據文件里會有大量NaN。如果直接繪圖pcolor會把NaN顯示成空洞contour碰到NaN可能會斷裂。最穩妥的做法是在插值階段就處理掉NaN——把NaN數據點剔除后再scatteredInterpolant而不是把NaN直接扔給插值函數。插值后網格上仍然可能殘留NaN遠超出測量范圍導致的這些讓它們保持NaN即可繪圖時會自動以白色或透明顯示。跳變值。某個點的效率突然從90%掉到60%又馬上恢復到90%這通常不是真實物理現象而是傳感器信號干擾或臺架數據采集丟幀。處理方式很簡單用滑動中值濾波或者設置一個合理的變化閾值超過閾值的點置為NaN。但這步操作要謹慎有些真實的“低效點”比如電機在零轉矩附近效率確實很低也是跳變式的不能一棍子打死。超界值。效率超過100%、轉矩超過電機峰值、轉速為負等這些數據明顯違背物理規律直接在預處理階段將超界值截斷或剔除。效率值超過110%的肯定是錯誤數據效率值在100%-105%之間的有可能是測量誤差可以保留并截斷到100%。6.2 MATLAB的版本兼容性問題2020b/2021a/2022b寫這套程序時我特意考慮了Matlab版本兼容性。幾個關鍵函數在不同版本間的差異要注意climvscaxisMatlab R2022a之后推薦用clim老版本用caxis。為了兼容可以在程序里做一次判斷if exist(clim, file) clim([...]); else caxis([...]); end。turbo函數在R2020b以上版本才有老版本用jet代替。scatteredInterpolant比griddata性能好但從R2013a起才替代老接口如果你還在用祖傳的R2010b那就只能用griddata了。另外特別提醒如果你的Matlab是32位老版本處理大數據量時可能內存溢出。MAP圖矩陣一般不大幾百×幾百但如果你做高分辨率渲染比如2000×2000的網格pcolor會非常吃力。這種時候可以用imagesc代替pcolor——imagesc直接按矩陣像素繪制速度快很多唯一的缺點是坐標軸和矩陣行列需要手動對齊而且imagesc默認Y軸方向是從上到下需要set(gca,YDir,normal)翻轉。6.3 用NaN遮蓋外特性之外的區域讓圖更“誠實”最后還得強調一下NaN遮蓋的重要性。電機MAP圖有個特殊之處矩形網格區域內有很大一部分外特性曲線之外是物理上無法達到的工作點。如果不做遮蓋這些區域會被插值算法造出一堆不存在的效率數據圖上會出現大片藍色或綠色極大地誤導看圖的人。正確做法是在畫圖前生成一個和外特性邊界匹配的布爾掩膜mask把外特性邊界之外的網格點全部置為NaN。這個掩膜可以通過inpolygon函數實現% 生成外特性邊界內的掩膜 [R_grid, T_grid] meshgrid(R_vec, T_vec); % 上下邊界曲線正轉矩和負轉矩 boundary_upper interp1(R_ext, T_ext, R_vec, linear, extrap); boundary_lower -boundary_upper; mask (T_grid boundary_upper) (T_grid boundary_lower); E_grid(~mask) NaN;執行這步之后圖上的外特性邊界之外的區域都會變成白色只有真實可運行的工況區有顏色。這是電機MAP圖最標準的畫法也是“專業感”的最大來源。很多學弟學妹畫的圖一眼看上去就是“業余感”歸根結底就是少了這個掩膜處理。7. 完整實戰示例從散點測試數據到成品MAP圖理論講了一堆這里給一個完整、可直接復制運行的示例程序。數據是模擬的但數據結構和真實臺架測試一致你可以用自己的測試數據直接替換。%% 模擬測試散點數據實際使用時替換為臺架數據 rng(42); R_raw []; T_raw []; E_raw []; % 模擬外特性 R_ext [0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000]; T_ext [300, 300, 300, 300, 280, 240, 200, 160, 130, 100, 70]; % 生成散點在外特性內隨機生成測點 for i 1:500 r rand * 10000; t_max_here interp1(R_ext, T_ext, r, linear, extrap); t (rand * 2 - 1) * t_max_here * 0.95; % 測點落在邊界內 eff 90 - 5 * (r / 10000) - 0.005 * abs(t - 100); % 構造效率模型 R_raw(end1) r; %#okSAGROW T_raw(end1) t; %#okSAGROW E_raw(end1) eff randn * 2; %#okSAGROW 加噪聲 end %% 核心步驟1生成目標網格 R_vec unique(round(R_raw / 500) * 500); % 按500rpm取整 T_vec unique(round(T_raw / 20) * 20); % 按20Nm取整 [R_grid, T_grid] meshgrid(R_vec, T_vec); %% 核心步驟2散點插值 F scatteredInterpolant(R_raw(:), T_raw(:), E_raw(:), linear, none); E_grid F(R_grid, T_grid); %% 核心步驟3外特性掩膜 boundary_upper interp1(R_ext, T_ext, R_vec, linear, extrap); mask (T_grid boundary_upper) (T_grid -boundary_upper); E_grid(~mask) NaN; %% 核心步驟4邊緣補點 R_plot [R_vec(1) - 500, R_vec, R_vec(end) 500]; T_plot [T_vec(1) - 20, T_vec, T_vec(end) 20]; E_plot NaN(length(T_plot), length(R_plot)); E_plot(2:end-1, 2:end-1) E_grid; E_plot(2:end-1, 1) E_grid(:, 1); E_plot(2:end-1, end) E_grid(:, end); E_plot(1, 2:end-1) E_grid(1, :); E_plot(end, 2:end-1) E_grid(end, :); %% 核心步驟5繪圖 figure(Color, w, Position, [100 100 900 650]); h pcolor(R_plot, T_plot, E_plot); set(h, EdgeColor, none); shading interp; colormap(turbo); clim([50 100]); hold on; % 等高線 [C, hC] contour(R_vec, T_vec, E_grid, [80 85 90 92 94 95 96], k, LineWidth, 0.8); clabel(C, hC, FontSize, 8, Color, [0.2 0.2 0.2], LabelSpacing, 200); % 外特性曲線 plot(R_ext, T_ext, k-, LineWidth, 2.5); plot(R_ext, -T_ext, k--, LineWidth, 2.5); hold off; % 坐標軸與標簽 xlabel(轉速 (rpm), FontSize, 11); ylabel(轉矩 (Nm), FontSize, 11); title(電機效率MAP圖, FontSize, 12); set(gca, FontSize, 10, Box, on); cb colorbar; cb.Label.String 效率 (%); cb.Label.FontSize 10; cb.Ticks [55 60 65 70 75 80 85 90 92 94 95 96 97]; % 導出 print(gcf, 電機效率MAP.png, -dpng, -r300);這段代碼我實測可以直接運行生成一張帶等高線、外特性邊界、邊緣補點、納米遮蓋的標準電機效率MAP圖。你只需要把數據替換成實際的臺架數據或仿真數據即可。8. 進階擴展思路與我的最終實操體會畫電機MAP圖這件事表面上是個繪圖技巧實質上是個數據處理思維問題。不少人把精力全花在“怎么讓顏色更好看”上卻忽略了圖的工程語義是否準確。我后期寫程序時越來越覺得幾個細節最重要一是色標范圍要固定。同一臺電機的方案對比兩張圖的色標范圍如果不一致視覺上根本沒法比。我習慣統一設成50到100哪怕某張圖的高效區范圍很小。二是外特性邊界必須畫。沒有邊界線的MAP圖在技術評審時會被質疑“這圖到底哪些點能用”三是網格匹配實測點。不要無腦加密網格原始測點密度決定了圖的真實分辨率。對于還想進一步擴展的讀者可以往這幾個方向嘗試把這套繪圖程序封裝成函數庫批量處理多種工況的MAP數據自動命名輸出文件做成流程化報告工具或者在Map圖基礎上疊加運行工況點比如把NEDC、WLTC循環的工況點描在同一張效率MAP上用顏色深淺表示該工況點的頻次權重就能直觀看出電機的效率設計是否匹配了目標工況也可以寫一個簡單的GUI界面通過滑條調節色標范圍、等高線層級等參數方便不會改代碼的同事自己出圖。最后分享一個我個人的小習慣出圖之前永遠先跑一遍min(Z_mat(:))和max(Z_mat(:))確認數據范圍合理再決定色標范圍。這一步看起來多余但真的能擋住一半以上的低級錯誤。有一次我拿到一批測試數據沒檢查范圍就畫圖結果圖上出現一片詭異的亮黃色查了半天才發現是某個測點的效率值是114傳感器接線問題導致跳變。從那以后數據范圍檢查成了我畫圖的固定動作。希望這篇分享能幫你少走這些彎路直接畫出能上會的專業MAP圖。本文還有配套的精品資源點擊獲取