ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用Matlab绘制电机效率MAP图:从散点到完美云图的通用方法

用Matlab绘制电机效率MAP图:从散点到完美云图的通用方法 简介本资源是一套面向电机控制工程师与高校科研人员的MATLAB专用MAP图绘制工具包解决电机效率、转矩、电流等多维性能数据可视化难题适用于电驱动系统设计、控制器标定及教学演示等实际场景。压缩包共3个文件116KB包含核心MATLAB脚本.m、原始测试数据表.xlsx及生成的高分辨率效率热力图.png其中脚本支持自动插值、曲面拟合与等高线填充可适配任意格式的转速-转矩二维工况数据无需修改即可复现专业级MAP图。已有196人学习下载资源结构简洁明确数据文件提供标准Excel模板便于替换实测数据脚本内置注释说明各参数含义与调用逻辑输出图像已按工程规范设置坐标轴标签、色标范围与标题开箱即用。 干电机开发或者搞新能源三电的人应该都干过这么一件事手里拿着台架跑出来的效率点转速、转矩、效率三组数要画一张电机效率MAP图。这种图在论文里、项目汇报里、方案评审里几乎绕不开。以前我自己也是这么干的数据导进Excel用条件格式涂色块再拖到Origin里插值、调色、加等值线一套流程下来少说二十分钟而且换个数据源就得重新来一遍作图风格还不统一。后来我干脆用Matlab写了一套通用的电机MAP绘制程序把散点数据读进来自动完成插值、网格化、等值线、云图渲染再叠加外特性曲线和效率标注。不光是电机效率MAP电池内阻MAP、电驱温度MAP、压缩机能耗MAP、甚至NVH测试的噪声分布云图只要数据是“x、y、z三列”这套思路都能直接套用。这也是这篇博文的核心价值不给你一个写死的脚本而是把“任何类型二维场数据图”的绘制逻辑彻底拆开让你能自己掌控每一个环节。无论你是刚接触Matlab的学生还是在做电驱系统开发的工程师只要需要把二维测试数据变成一张能放进报告里的图这篇内容都值得你花十分钟读完然后直接抄作业。1. 电机MAP的本质以及为什么要自己画1.1 电机MAP到底是什么先把手里的数据理清楚。电机台架测试时通常会固定母线电压然后从低速到高速逐步加载测出每个转速点下不同转矩点对应的效率。整理出来就是三列数据转速nrpm或r/min、转矩TN·m、效率η%。把这些散点画在“转速-转矩”平面上用颜色代表效率高低就形成了我们常说的电机效率MAP。电机MAP在工程里不是花架子。它直接告诉你三件事高效区在哪一般来说电机在中高转速、中高转矩区域效率最优这个区域要尽量覆盖整车常用工况。外特性边界在哪同一转速下能输出的最大转矩连成的线就是外特性曲线MAP图上最外围的轮廓就是这条线。效率分布是否合理如果你搞的是驱动电机设计那这张图是评价电磁方案和调速范围的重要依据。所以MAP不只是一张“好看的图”它承载的是整个电驱动系统的性能判断。图如果画得不到位方案评审时别人一眼就能看出数据有问题或者处理粗糙直接影响说服力。1.2 为什么不用Excel/Origin非要自己写程序很多人习惯了Excel“条件格式色阶”或者Origin“插值云图”的流程这两个工具本身没问题但有几个不好受的地方批量处理困难一个项目十几款电机、几百组工况数据每张图都要手工点一遍重复劳动量大。风格不统一今天用这个配色明天换个字体后天项目交接接手的人很难做出和之前一模一样的图。数据量大卡顿台架连续采集的数据动辄几万行Excel和Origin在大数据量下明显吃力。边界处理黑盒Origin内置的插值算法对数据范围、外插、边界点的处理往往不透明画出来可能出现“图上这圈颜色其实不该有数据”的情况。Matlab脚本化的优势在于跑一遍出图改数据重跑一遍又是新图参数全部变量控制配色、字体、线宽统一可控。而且最重要的是你可以清楚知道每一块颜色是如何算出来的出了问题可以追根溯源。1.3 这套程序的设计目标我在写这套程序时给自己定的目标很明确接口简单只需要传入三列向量x、y、z哪怕列名不同内部自动识别。绘制完整散点、云图、等值线、外特性叠加、效率标注、色标、标题单位一张图全齐。通用性强换一套数据就能用不绑定“电机”这个场景。输出可复现同一份数据每次跑出来图完全一致适合论文和报告反复修订。顺着这个目标整个程序可以拆成三个层次数据处理、网格插值、渲染输出。下面逐层拆解。2. 数据组织与导入所有绘图的地基2.1 数据从哪来怎么进Matlab电机MAP数据常见来源有三种台架实测数据通常通过CAN记录或测功机软件导出、仿真数据Maxwell/Motor-CAD/JMAG等电磁仿真软件后处理、整车路谱工况点NEDC/WLTC循环工况下的转速转矩点。不管来源是哪个你最终拿到的通常是一个Excel或CSV表格典型的如下转速(rpm)转矩(N·m)效率(%)10005085.2100010088.720005089.1.........有些测试软件喜欢输出三列但带表头有些则是纯数据。为了适应这些场景我在程序入口处统一用readtable处理function plotMap( filepath, xName, yName, zName ) data readtable( filepath ); x data.(xName); y data.(yName); z data.(zName); % 以后所有逻辑只依赖 x, y, z endreadtable的好处是能自动识别表头和数据类型纯数字数据也能识别。如果你的表不是标准格式比如第一行是测试条件说明那可以用readtable(filepath, NumHeaderLines, 1)或readmatrix直接读矩阵。我建议优先用readtable因为后面还要按列名操作可读性高很多。2.2 数据清洗脏数据不出图这是最容易忽略的一步也是很多图“看起来不对劲”的根源。台架数据里经常混进这些脏东西传感器异常导致负效率转轴倒拖工况、传感器零点漂移可能让效率出现负值或超过100%的值。重复测点同一个转速转矩下测了多次效率值取平均或保留最后一次。异常点偶发的干扰脉冲某个点效率突然降到10%又跳回来。转速转矩带单位文本比如“1000rpm”这种字符串readtable读进来变成cell。基本清洗逻辑我建议这么做% 剔除缺失值 valid ~(isnan(x) | isnan(y) | isnan(z)); x x(valid); y y(valid); z z(valid); % 剔除明显的非物理值电机效率通常限定在 0-100 或 0-1 if max(z) 1.5 % 自动判断 z 是小数还是百分数 z z * 100; % 统一转成百分数 end z(z 0 | z 100) NaN;效率超过100%这个事要额外说一句。永磁同步电机在弱磁区确实可能出现“表观效率”超过100%的情况因为功率计算时忽略了铜耗、铁耗之外的杂散损耗或者测功机精度误差导致。但画MAP图的时候除非你专门研究杂散损耗否则还是建议把超过100%的点处理掉或者截断否则颜色条范围会被拉得很宽整张图对比度会变差。2.3 数据预检三板斧在开始插值和绘图之前我习惯先快速做三个检查确保数据本身是健康的打印x、y、z的范围fprintf(x: %g ~ %g\n, min(x), max(x))看看转速转矩单位是不是正常。画一个散点图预览scatter(x, y, 10, z, filled)人眼扫一遍有没有离群点或者空洞区域。检查重复点数量同一个(x,y)坐标出现多次插值算法会出警告或结果不稳定。第三步容易忽视。我自己遇到过同一个点出现两个效率值scatteredInterpolant直接报“Duplicate data points”警告结果图上那个位置出现一个突兀的斑块。解决方案是去重[xy, ia, ic] unique( [x(:), y(:)], rows ); if length(ia) length(x) warning(发现重复点取每个位置的平均值); z_avg accumarray(ic, z(:), [], mean); x xy(:,1); y xy(:,2); z z_avg; end这个处理虽然不完美但对绝大多数数据点稀疏的台架测试场景够用了。3. 核心绘制流程从散点到完整MAP3.1 插值方法选型拿到散点数据后下一步是把散点变成规则网格上的数值才能画出连续云图。Matlab里常见选择有三个TriScatteredInterp老函数现在基本不用、scatteredInterpolant推荐、griddata简单但功能弱一些。我强烈建议用scatteredInterpolant。原因有三个它支持三种插值方法nearest、linear、natural其中natural自然邻域插值在“数据稀疏、边界不规则”的情况下表现非常好。它可以重复调用同一个插值对象改一个点查询位置不需要重建。它对无效值NaN处理更可控。对比一下三种方法的使用场景方法特点适合场景linear速度快内存消耗低但线性插值后等值线偏硬数据密集、规则分布natural自然邻域平滑度好对不规则分布数据鲁棒台架实测点、仿真散点我的默认选择nearest最近邻速度快但会产生阶梯状色块离散性强的数据如挡位分布3.2 网格生成与分辨率网格就是在转速方向和转矩方向上各取若干点生成二维坐标矩阵。这一步的关键是网格分辨率的选取。如果网格太密比如转速方向2000个点转矩方向2000个点渲染很慢而且数据稀疏区域会插出明显的人为波纹如果网格太稀等值线和云图边界会显得粗糙。我的经验是转速方向和转矩方向各取300到500个点完全够用再密无肉眼可见差异反而白白浪费内存。nPtX 300; % 转速方向网格点 nPtY 300; % 转矩方向网格点 xq linspace( min(x), max(x), nPtX ); yq linspace( min(y), max(y), nPtY ); [Xq, Yq] meshgrid( xq, yq );注意meshgrid生成的Xq和Yq矩阵尺寸是nPtY × nPtX也就是行方向对应y列方向对应x。这个顺序容易搞混后面绘图时如果坐标轴反了多半是这里的问题。网格范围我直接取数据的min和max。但你如果想要一张更“干净”的图可以在边界处稍微缩小一点点比如取1%分位数到99%分位数避免个别离群点把图拉伸得很空。3.3 插值计算和边界掩膜插值计算本身很简单F scatteredInterpolant( x, y, z, natural, linear ); Zq F( Xq, Yq );不过这里有一个大坑scatteredInterpolant默认会对网格范围内所有点都做插值包括那些超出了原始数据凸包范围的区域。也就是说如果你的数据大致覆盖一个扇形区域电机MAP就是这样但网格是规则的矩形那么矩形的四个角上就会被插值算法“外插”出一堆完全不存在的效率值。这些假数据画出来就是一团突兀的颜色非常难看。解决办法是做一个边界掩膜。最简单有效的方法是用凸包或者更精确的alpha shape把原始数据点的包络区域提取出来网格中落在包络外面的点全部置为NaN% 构造 alpha shape 包络 shp alphaShape( x, y, 1 ); % 1 是alpha半径需要根据数据尺度调整 in inShape( shp, Xq, Yq ); Zq(~in) NaN;alpha半径这个参数比较敏感。半径太大包络接近凸包容易把凹进去的区域也包进来半径太小包络会碎成很多小块原本连通的区域反而被切掉。我一般是先画一下plot(shp)看看包络形状再调整alpha。如果嫌麻烦用凸包convhull加inpolygon也行但电机MAP的外特性通常不是凸的凸包会把“高效区在一个角上”这种细节吞掉所以我更推荐alpha shape。3.4 绘制云图、等值线和外特性插值完有了完整的Zq矩阵绘图就进入“拷贝”环节了。核心绘制代码figure(Color, w); % 先用云图作为底色 contourf( Xq, Yq, Zq, 50, LineStyle, none ); hold on; % 叠加等值线效率间隔5%比较常规 [C, h] contour( Xq, Yq, Zq, [0:5:100], k ); clabel( C, h, FontSize, 7, LabelSpacing, 300 ); % 叠加外特性曲线如果手里有转速-最大转矩数据 plot( n_outer, T_outer, r-, LineWidth, 2 ); % 修饰 colormap( jet ); % 或者 parula看你审美 c colorbar; c.Label.String 效率 (%); xlabel(转速 (rpm)); ylabel(转矩 (N·m)); axis tight;这里有几个细节值得展开contourf而不是pcolor或imagescpcolor画出来每个网格一个色块边缘锯齿感明显contourf自动做颜色填充和等值线平滑工程上更常用。等值线间隔选5%还是2%取决于你数据范围。如果效率范围只有70%-96%间隔2%会显得线很密如果范围大间隔5%刚好。clabel会往等值线上贴标签但有时候标签贴得密密麻麻可以用LabelSpacing参数增大单位数值的间距。不过这个参数实际效果在不同Matlab版本里有区别如果你用的版本不生效就直接手动调整标签位置或者干脆不用clabel自己算几个关键等值线点放text标注。外特性曲线是一个单独的行向量或者列向量数据它不属于插值网格。用plot叠加就行。叠加前先把外特性数据准备成转速n_outer和转矩T_outer两列注意与插值网格数据的单位保持一致。3.5 为什么要把外特性曲线叠上去很多人画电机MAP只画云图不加外特性线。在我做项目评审时外特性线是判断一张MAP图是否专业的重要标志。原因很简单MAP图的颜色区域是“数据覆盖范围”但电机真正的可运行范围不是整个矩形网格而是转速-转矩平面上一片由外特性曲线围起来的区域。加了外特性线别人一眼就能看出哪些颜色是真实物理可实现范围内的哪些是补出来的插值假象。对于论文来说这也是一张标准电机效率MAP图的基本配置。如果手里没有外特性曲线数据也可以从MAP数据里自动提取对每个转速点取该转速附近所有转矩的最大值再连成线。不过这样提取出来的线可能不够光滑我一般会在绘制前用smooth或者fit做一次轻量平滑。4. 把程序写“通用”任何数据都能画的封装思路4.1 不写死参数函数接口设计如果只是画一张电机MAP图脚本就够了谈不上“程序”。但既然要强调“完美绘制任何类型的数据”肯定要封装成函数。我设计了一个通用接口核心思路是把“数据本身”和“数据含义”分离function [fig, ax] plot2DMap( data, opts ) % data: 结构体必须包含 % .x 列向量 % .y 列向量 % .z 列向量 % opts: 可选配置 % .xLabel / .yLabel / .zLabel 轴标签 % .title 主标题 % .nGridX / .nGridY 网格数 % .interpMethod 插值方法 % .alphaRadius alpha shape 半径 % .levels 等值线间隔 % .colormapName 配色方案 % .isShowPoints 是否叠加原始散点 % .lineX / .lineY 可选叠加曲线 % .lineStlye / .lineWidth 曲线样式 end这样设计的好处是调用方只需要关心“我有什么数据想怎么呈现”不需要关心里面用的是什么插值算法、网格多大。所有参数都有默认值零配置也能跑只是出图质量“够用”想精调再加参数。Matlab对结构体参数的默认值处理我习惯用isfield判断再赋值不用第三方库if ~isfield(opts, nGridX), opts.nGridX 300; end if ~isfield(opts, alphaRadius), opts.alphaRadius []; end4.2 一个函数适配五种场景封装好之后这套东西的扩展能力就体现出来了。我用同一套函数画过下面几种图电机效率MAPx转速y转矩z效率。电池内阻MAPxSOCy温度z内阻。对于动力电池横纵轴单位完全不同只要替换标签就行。电驱定子温度MAPx转速y转矩z绕组最高温度叠加一条温度限值等高线判断热工况。压缩机能效MAPx转速y压比zCOP或能效比。车辆能耗Mapx车速y加速度z单位里程能耗分析CLTC工况下的能耗分布。这些数据唯一的共同点就是“x、y、z三列”但绘制流程完全一致。这正是我标题里“完美绘制任何类型的数据”的真正含义不是靠一个专门为电机MAP写死的程序而是把握住二维场数据可视化的通用逻辑电机MAP只是其中一个最典型的应用。4.3 自动判断数据量级和物理范围通用的另一个要求是适应性好。我在函数里加入了几段自适应逻辑效率范围自适应当max(z)在1和1.5之间时自动把z放大100倍统一以百分数显示。坐标轴单位自动缩写当转速数值很大比如上万rpmX轴刻度自动用k rpm表示避免刻度数值太长。等值线间隔自适应如果z的范围小于15%自动改成1%间隔或2%间隔让等值线不至于太少。这个思路看起来简单实际让程序从“只对我的数据有效”变成“对任何人的数据都有效”的关键一步。其他同事拿他们的数据集来用时不需要先读一遍源码理解我的数据假设直接跑就对了。5. 实战代码一次跑通的完整示例5.1 模拟数据生成为了让你能直接复现完整流程我用Matlab生成一组仿真MAP数据来演示。数据逻辑是模拟一台额定功率150kW的永磁电机最高转速12000rpm峰值转矩350N·m在低转速区恒转矩高转速区恒功率。rng(0); % 固定随机种子保证可复现 % 生成转速、转矩测试点 n rand(2000,1) * 12000; T_peak min( 350, 350 * 12000 ./ max(n, 1) ); % 外特性简化模型 T_data T_peak .* (0.2 0.8 * rand(size(n))); % 在可行区域内分布 % 加入少量异常点模拟台架噪声 n [n; 2000; 6000]; T_data [T_data; 10; 500]; eff 0.8 0.16 * exp( -((n-5000).^2)/(2*3000^2) ) .* exp( -((T_data-200).^2)/(2*120^2) ) randn(size(n))*0.01; eff max(0.6, min(0.96, eff)) * 100; % 效率范围 60%~96%说明一下这里我用高斯峰模拟“中速中转矩最高效”的电机特性实际测试数据分布没有这么平滑但用于演示绘图流程足够了。最后两个异常点一个转速2000转矩10、一个转速6000转矩500就是为了后面“问题排查”环节演示剔除和掩膜效果。5.2 完整绘制脚本% 数据准备 x n; y T_data; z eff; % 剔除异常值效率范围检查 valid z 50 z 100; x x(valid); y y(valid); z z(valid); % 网格化 nPtX 400; nPtY 400; xq linspace(min(x), max(x), nPtX); yq linspace(min(y), max(y), nPtY); [Xq, Yq] meshgrid(xq, yq); % 插值 F scatteredInterpolant(x, y, z, natural, linear); Zq F(Xq, Yq); % 边界掩膜 shp alphaShape(x, y, 1); in inShape(shp, Xq, Yq); Zq(~in) NaN; % 绘图 figure(Color, w, Position, [100 100 900 600]); contourf(Xq, Yq, Zq, 50, LineStyle, none); hold on; % 外特性线 n_outer linspace(1, 12000, 300); T_outer min(350, 350 * 12000 ./ n_outer); plot(n_outer, T_outer, r-, LineWidth, 2); % 效率等值线 [C, h] contour(Xq, Yq, Zq, 55:5:100, k); clabel(C, h, FontSize, 7.5, LabelSpacing, 250); colormap(parula); cb colorbar; cb.Label.String 效率 (%); xlabel(转速 (rpm), FontSize, 12); ylabel(转矩 (N·m), FontSize, 12); title(电机效率MAP, FontSize, 14); axis tight;注意这段代码里我把效率最小值设为55这样等值线从55%开始标。如果有些区域效率低于55那一块颜色会是最低色看起来也自然。5.3 出图之后的细节打磨第一版图出来后不要急着用于报告。我通常会再花两分钟调整下面几个点坐标轴字体大小和粗细set(gca, FontSize, 11, FontName, Helvetica)在Matlab 2021以后中文字体也能显示但导出PDF时建议统一用英文字体更稳。Colorbar的刻度范围如果Zq的最小值是55最大值是96colorbar默认会从55到96。我一般手动设成caxis([50 100])或者新版clim([50 100])这样颜色固定在标称范围不同MAP图之间对比效率更直观。图片导出论文用300dpi以上的TIFF报告用PNGPPT用SVG或EMF。输出代码exportgraphics(gcf, motor_map.png, Resolution, 300);exportgraphics是R2020a之后推荐的方式画质好而且能正确保留透明背景和矢量内容。老版本的print也可以用但字体和DPI设置麻烦不少。5.4 网格密度选多少合适关于网格密度我再多说一句。很多新手喜欢把网格设成1000×1000觉得越密越精细。这个想法有误区网格密度并不会增加原始数据的真实分辨率它只影响插值结果的“平滑程度”。数据点本身稀疏时网格密度提高只会让插值曲面在点与点之间画出更多渐变看起来“丝滑”实际上这些渐变是对平滑性的假设不是真实测量。我实测下来台架数据点一般几百到几千个网格设在300×300到500×500之间图已经完全看不出粗糙感。超过这个密度绘图时间成倍增加文件也更大收益极低。在仿真数据点特别密比如几万个点的场景可以适当提到800×800但依然没必要到1000以上。6. 常见问题与排查技巧实录6.1 插值后出现负值或者突兀的峰谷这个现象最常见的两个原因一是原始数据存在离群点。比如转速6000时转矩500的异常点还在数据里插值时它会把周围几十个点的值向上“拽”形成一个假高峰。解决办法是画图前先画散点图人工审核再用物理范围过滤。二是插值方法外插导致超界。scatteredInterpolant对凸包外的点默认会外插出一个线性延伸值当转速很低且转矩超出外特性时效率可能外插成负数。这就是前面强调边界掩膜的原因。如果你发现图中角落出现颜色突变或者反色区域先检查是不是忘了对Zq做掩膜。排查技巧在插值之后直接看min(Zq(:))和max(Zq(:))如果超出物理范围比如效率负值或超过100九成是上面两个原因。6.2 矩形网格四个角被填上一堆假数据这是没做alpha shape掩膜最典型的表现。特别是电机MAP数据覆盖范围约等于外特性曲线下方的区域而网格是矩形右上角和左上角都会出现大块不合理颜色。我的处理流程是shp alphaShape(x, y); plot(shp); % 先看包络形状是否合理 in inShape(shp, Xq, Yq); Zq(~in) NaN;alphaRadius不传时alphaShape会根据点密度自动选一个半径多数情况下自动值就够用。如果自动值把连通区域断开就手动减小radius如果包络太粗糙就手动增大radius。这个参数我调过很多次经验是把radius设置成数据点间距平均值的2倍左右比较合理。6.3 外特性线叠加后明显超出数据范围这种情况出现在你用“理论外特性”叠加“实测MAP”时。理论外特性是设计值实测数据可能因为温升、电压跌落没有跑到边界导致红线悬在数据范围外面。两种处理方式画图时把外特性线作为数据包络裁剪掉悬空部分。最简单的是只画到实测数据包裹到的最高转速为止。在报告中保留完整理论外特性但在图注里说明“实测数据未覆盖边界区域”。这个方法在工程汇报里反而更诚实也更专业。我习惯用第二种。它说明你清楚数据边界在哪不是没测到而是受限于测试工况。6.4 几十万行数据画图卡死台架连续采集的数据经常有几十万行甚至上百万行。这种情况下直接scatteredInterpolant插值会非常慢内存也吃紧。我的处理策略是先用unique和accumarray做数据去重然后对网格区域做空间降采样。一个简单有效的办法是把转速和转矩分别四舍五入到合适的精度然后按网格单元取平均值% 将数据按 20rpm 和 5N·m 的网格取平均 x_bin round(x / 20) * 20; y_bin round(y / 5) * 5; [xy, ~, ic] unique([x_bin(:), y_bin(:)], rows); z_mean accumarray(ic, z(:), [], mean); x_uniq xy(:,1); y_uniq xy(:,2);这样处理后几万点会被压缩到几百到几千个代表点同时保留了总体分布特征插值计算量大幅下降。这个方法在实测数据的“原始采集点”画MAP时尤其实用因为在同一个5N·m转矩网格内效率变化本来就很小取均值反而更符合测试预期。6.5 等值线标签互相叠加看不清clabel自动标注时如果曲线密集标签会堆在一起。我的解法有两个增大LabelSpacing比如从默认的72改到250或400让标签在线上分布得更稀疏。只标注特定几条线比如效率MAP只需要标90%、92%、94%、96%其他线不标。设置clabel(C, h, [90 92 94 96])即可。个人建议第二种更多用。工程图不是教学图不需要每条等值线都有标签标出几条关键线够了。6.6 颜色方案怎么选这是审美问题但也有些工程惯例。Jet色从红到蓝对比度大适合快速识别高低区域Parula是Matlab默认色蓝色到黄色色盲友好适合正式论文。我会根据用途切换使用场景推荐配色原因项目汇报、PPTjet红色高效区一目了然冲击力强论文、技术报告parula / turbo色盲友好、打印失真小温度场、热负荷hot / gray符合“越热越红白”的直觉离散数据、挡位图lines区分类别而不是连续值如果你发表期刊论文还要考虑灰度打印时的区分度。jet转灰度后会丢失明度变化而parula在这方面要好得多。结尾一些个人经验前阵子我拿这套程序帮同事画了一张电池内阻MAPx轴是SOCy轴是温度z轴是1C放电内阻。我只改了三行轴标签和一行单位其他什么都没动图直接能放进pack报告里。那一刻我才真正觉得这套程序的价值已经从“电机部门专用工具”变成了“任何二维场数据都能用的画图引擎”。最后分享一个小技巧如果你经常要和报告模板保持一致可以在函数里预先设定字体、线宽、图幅的默认值并把exportgraphics的导出分辨率固定下来。这样不管你换不换数据出图风格永远是统一的。等你自己真正跑起来过一组数据、把一张MAP图从散点做到可交付状态你就能体会到这套流程带来的省心。本文还有配套的精品资源点击获取
返回列表