Matlab折线图进阶:从基础绘制到自定义样式(附完整代码)
1. Matlab折线图基础绘制:从零开始
第一次用Matlab画折线图的时候,我被它简洁的语法震惊了。只需要几行代码,就能把枯燥的数据变成直观的图形。对于数据分析师和科研人员来说,这简直是神器。让我们从一个最简单的例子开始:
x = 1:10; % x轴数据 y = rand(1,10); % 随机生成y轴数据 plot(x, y); % 绘制折线图这三行代码就完成了一个基础折线图的绘制。但实际工作中,我们的需求往往更复杂。比如需要同时展示多组数据对比:
x = 1:0.5:5; data1 = [2.1, 3.5, 4.2, 5.0, 6.1, 7.3, 8.2, 9.1]; data2 = [1.9, 2.8, 3.9, 4.8, 5.9, 6.7, 7.8, 8.7]; data3 = [2.3, 3.2, 4.1, 5.2, 6.0, 7.1, 8.0, 9.3]; figure % 新建图形窗口 plot(x, data1, x, data2, x, data3); title('三组实验数据对比'); xlabel('时间(s)'); ylabel('温度(℃)'); legend('实验组1','实验组2','实验组3');这里有几个实用技巧:
- 使用
figure命令可以避免新图覆盖旧图 title、xlabel、ylabel分别设置标题和坐标轴标签legend添加图例,顺序与plot中的数据集对应
2. 线条样式的高级定制
基础绘图掌握后,我们来看看如何让图表更专业。Matlab提供了丰富的线条定制选项,包括线型、颜色和标记样式。
2.1 线型与颜色组合
Matlab支持多种预设样式组合,格式为'线型+标记+颜色':
x = linspace(0, 2*pi, 50); y1 = sin(x); y2 = cos(x); plot(x, y1, '--ro',... % 红色虚线+圆圈标记 'LineWidth', 1.5,... 'MarkerSize', 8,... 'MarkerFaceColor', 'r'); hold on; % 保持当前图形 plot(x, y2, ':bs',... % 蓝色点线+方形标记 'LineWidth', 2,... 'MarkerSize', 10,... 'MarkerFaceColor', 'b'); hold off;常用线型有:
-实线(默认)--虚线:点线-.点划线
颜色代码:
r红色g绿色b蓝色k黑色m品红c青色y黄色
2.2 自定义颜色和线宽
如果需要更精确的颜色控制,可以使用RGB三元组:
plot(x, y1,... 'Color', [0.2 0.6 0.8],... % RGB值,范围0-1 'LineWidth', 3,... % 线宽 'LineStyle', '-.');对于学术图表,我建议:
- 线宽设置在1.5-2.5之间
- 使用高对比度但不过于鲜艳的颜色组合
- 不同线条要有明显区分的样式
3. 坐标轴和图例的精细调整
3.1 坐标轴定制
默认的坐标轴设置往往不能满足专业需求,Matlab提供了全面的控制选项:
x = 0:0.1:10; y = exp(-x).*sin(2*pi*x); plot(x, y); axis([0 10 -1 1]); % 设置坐标范围[xmin xmax ymin ymax] set(gca, 'XTick', 0:2:10); % x轴刻度 set(gca, 'YTick', -1:0.5:1); % y轴刻度 set(gca, 'XGrid', 'on'); % 开启x轴网格 set(gca, 'YGrid', 'on'); % 开启y轴网格 set(gca, 'FontSize', 12); % 设置字体大小 xlabel('时间(s)', 'FontSize', 14); ylabel('振幅', 'FontSize', 14);3.2 专业级图例设置
图例的位置和样式对图表可读性影响很大:
legend('实验数据',... 'Location', 'northeastoutside',... % 放在图外右上角 'FontSize', 12,... 'Box', 'off'); % 去掉边框常用位置参数:
north顶部居中south底部居中east右侧居中west左侧居中northeast右上角(默认)northwest左上角southeast右下角southwest左下角
4. 多图叠加与子图绘制
4.1 使用hold叠加图形
hold on命令可以实现在同一坐标系中绘制多个图形:
x = 0:0.1:2*pi; y1 = sin(x); y2 = cos(x); y3 = sin(x).*cos(x); figure plot(x, y1, 'r-', 'LineWidth', 2); hold on; plot(x, y2, 'b--', 'LineWidth', 2); plot(x, y3, 'k:', 'LineWidth', 2); hold off; legend('sin(x)', 'cos(x)', 'sin(x)*cos(x)'); title('三角函数曲线对比');4.2 子图(subplot)绘制
当需要并排显示多个相关图表时,subplot是更好的选择:
x = linspace(0, 2*pi, 100); figure subplot(2, 2, 1); % 2行2列第1个位置 plot(x, sin(x)); title('sin(x)'); subplot(2, 2, 2); % 第2个位置 plot(x, cos(x)); title('cos(x)'); subplot(2, 2, 3); % 第3个位置 plot(x, tan(x)); title('tan(x)'); ylim([-10 10]); % 限制y轴范围 subplot(2, 2, 4); % 第4个位置 plot(x, sin(x).*cos(x)); title('sin(x)*cos(x)');5. 导出高质量图表
绘制好的图表通常需要导出为图片用于报告或论文。Matlab提供了多种导出选项:
figure plot(x, y); set(gcf, 'Position', [100 100 800 600]); % 设置图形大小[左 下 宽 高] set(gcf, 'Color', 'w'); % 设置背景为白色 % 导出为PNG print('-dpng', '-r300', 'myplot.png'); % 300dpi分辨率 % 导出为PDF(矢量图) print('-dpdf', '-painters', 'myplot.pdf'); % 导出为TIFF(适合论文投稿) print('-dtiff', '-r600', 'myplot.tif');对于学术用途,我推荐:
- 使用矢量图格式(PDF/EPS)用于投稿
- 分辨率至少300dpi
- 图形大小设置为8-10cm宽(单栏)或15-18cm宽(双栏)
- 字体大小不小于8pt
