本节摘要:
plot是 Matlab 绘图体系的起点,围绕它长出了散点、对数轴、双纵轴、子图等家族成员。本节讲折线图的基本用法、线型与标记控制、多序列对比的组织方式,以及按数据形态选图的判断标准。
早期 Matlab 的可视化就是一条折线:plot(y),横轴自动是序号。这个极简入口是刻意的——数值计算的结果 ninety percent 是"一串数对一条线",把最常见的情形做成零参数可用的函数,剩下的交给演化。家族成员都是后来按需加的:对数坐标来了 loglog/semilogy,误差棒来了 errorbar,双纵轴来了 yyaxis。
x = linspace(0, 2*pi, 200); plot(x, sin(x), '-b', x, cos(x), '--r', 'LineWidth', 1.5); xlabel('角度'); ylabel('幅值'); legend('正弦', '余弦', 'Location', 'best'); title('三角函数对比'); grid on;
线型字符串三段含义:--r 是虚线红色,标记符如 o、s 可以叠加。LineWidth、MarkerSize 是属性名值对,这个"字符串-值"风格的接口贯穿全家族,后面句柄图形时代会升级为统一的属性系统。
两条量纲不同的曲线放同一坐标区是经典错误——一条把另一条压成直线。解法按情况分两种:
yyaxis left; plot(t, pressure); ylabel('压力'); yyaxis right; plot(t, flowRate); ylabel('流量');
多幅相关图用子图阵列组织,tiledlayout 是新一代布局器(取代老 subplot,留白和对齐控制更好):
tiledlayout(2, 1, 'TileSpacing', 'compact'); nexttile; plot(t, raw); title('原始信号'); nexttile; plot(t, filtered); title('滤波后');

图不是数据的倾倒,是论点的载体。我审自己的图时会问三句:标题是不是一句结论("滤波后 300 Hz 干扰被抑制"而不是"结果图");不看图例能不能猜出坐标轴单位;黑白打印后还能区分各序列吗(线型要冗余编码颜色)。三问过不了就回去改。
⚠️ 常见坑:默认图窗分辨率导出后字小如蚁。导出前用
exportgraphics(gca, 'fig.png', 'Resolution', 300),或者干脆先设好字体大小再导出。
实验报告里最常见的图型:四组条件、每组重复测量若干次,要展示均值差异与散布。完整过程从数据组织到导出:
cond = categorical(repelem(1:4, 8)); val = 5 + 0.6*double(cond) + randn(32, 1)*0.4; m = accumarray(double(cond), val, [], @mean); s = accumarray(double(cond), val, [], @std); figure; hold on; grid on errorbar(1:4, m, s, 'o', ... 'LineWidth', 1.4, 'MarkerSize', 7, ... 'MarkerFaceColor', [0.2 0.4 0.8], 'CapSize', 8); xlabel('处理条件'); ylabel('响应幅值'); xticks(1:4) title('均值随条件上升,组内散布稳定') exportgraphics(gcf, 'errbar.png', 'Resolution', 300)
解读:误差棒的帽子长度(CapSize)调大后更易读;蓝色实心圆点加细线是黑白打印也安全的组合。若每组散布差异悬殊,均值图会掩盖它,此时应改画每组全部散点叠加均值线——原始数据永远值得多画一次。变式:把第四组换成"处理后"的对照组,图就升级为前后对照设计,检验用配对 t 检验配图更贴。
绘图环节的怪现象集中三类。一是"图上什么都没有":多半是数据含 NaN 且用了默认连线方式,或 hold on 忘了导致后画的把先画的覆盖——单独 plot 每组数据即可定位。二是"图例顺序与曲线对不上":图例按绘制顺序编号,中途补画的曲线会让注释错位,习惯上把每条线的句柄存进数组,最后统一 legend([h1 h2], ...)。三是中文标签变方框:导出环境缺中文字体所致,图窗里先把默认字体设为系统已装的中文字体再画图。另有一个纯习惯问题:坐标轴范围被离群点撑爆,曲线被压成一条平线,先处理离群点或 ylim 手动收范围,两种都可,但要在图注里说明。
同样的数据对,plot 与 scatter 传达的语义不同:折线暗示"相邻点之间有连续过程",散点只陈述"这些观测存在"。用折线画独立样本(比如每组只测一次的条件对比)是在暗示并不存在的连续性,读者会顺着线读出虚假的趋势。规则一句话:横轴是连续量(时间、频率、浓度梯度)用线,横轴是类别或独立样本用散点或柱状。这是图的语法,与代码无关,却决定图是否诚实。
演化视角补一笔:plot 家族之所以几十年保持入口不变、成员不断增多,靠的是"数据形态决定函数形态"这条分层——一维序列、二维网格、多通道、地理坐标各有专职函数,但坐标区、图例、导出这些公共设施全部共享。学会 plot 等于学会了半个绘图体系的操作词汇,4.2 与 4.3 的内容都建立在这个共享层之上。
plot 的极简入口是有意设计,家族成员按数据形态陆续分化;yyaxis,别硬塞同一坐标区;tiledlayout 取代 subplot,多图布局留白可控;