MATLAB制作折线图:从入门到精通(下)

一、三类进阶折线图适用场景

1. 超长时间序列折线图:时间跨度大,趋势为王

超长时间序列折线图的适用场景

当你的数据覆盖数年甚至数十年,且希望观察宏观变化趋势时,超长时间序列折线图是理想选择。例如:

  • 某地区近20年气温的年均变化;

  • 公司10年来的年度营业额走势。

举个例子:

你想了解过去20年北京的年均温度有没有变化?可以用超长时间序列折线图来展示,X轴是年份,Y轴是温度。把每年的温度连接成线,一眼就能看出是否变暖。如果整体是缓慢上升,那说明:变暖是真的!

适用场景总结

  • 展示跨年级别的数据趋势

  • 分析宏观变化(气候、经济、人口等)

  • 数据密集时更突出整体走势

  • **注:**数学建模类比赛遇到超多数据时,也可以看情况选择此类折线图

2. 双坐标轴折线图:对比两种不同量纲的数据

双坐标轴折线图的适用场景

当你有两组单位不同、数量级不同的数据需要一起比较时,双坐标轴折线图能让两者在同一张图上清晰展示。例如:

  • 月平均温度和月降水量的比较;

  • 企业广告支出和销售额的比较。

举个例子:

你想看看广告支出和销售额有没有关系?可以画一个双坐标轴图,左边Y轴是广告费,右边Y轴是销售额,X轴是月份。如果发现两条线同时上涨,那可能意味着:钱没白花,广告见效了!

适用场景总结

  • 两组数据量纲差异大,无法放在同一Y轴

  • 强调变量间的同步性或关联性

  • 避免图形失真或误导

3. 与柱形图结合的折线图:一图呈现两种信息

与柱形图结合的折线图的适用场景

当你需要同时展示总量(柱形)和趋势(折线)时,这种组合图表非常有用。例如:

  • 每月销售额(柱)与毛利率(线);

  • 访问人数(柱)与平均停留时长(线)。

举个例子:

你记录了全年每月的产品销售额,还想显示利润率的变化?柱子表示销售额,线表示毛利率。这样就能看出:卖得多的时候是不是也赚得多?

适用场景总结

  • 数据包含"总量"和"比例"两种维度

  • 同时可视化数量和趋势

  • 让报表更直观、信息更丰富

你手上有什么数据? 用哪种折线图?
跨度很长的时间序列(例:20年气温变化) 超长时间序列折线图
两种单位不同的数据(例:广告支出 vs 销售额) 双坐标轴折线图
一组总量数据 + 一组比例数据(例:销售额 + 毛利率) 与柱形图结合的折线图
[### 三种进阶折线图类型总结]

二、实现绘图前的数据检查

折线图类型 特别准备事项
超长时间序列折线图 数据应按时间顺序排列,时间字段建议为数值或可识别的日期格式(如年份、日期)
双坐标轴折线图 两组数据应有相同的X轴(如时间),并检查两组Y轴的量纲、数值范围差异是否合理
与柱形图结合的折线图 柱形图和折线图各自所需数据需齐全,注意变量类型(一个为总量,一个为比例或比率)
[### 针对三种进阶折线图的数据需求]

三、MATLAB绘制相应折现图

1. 超长时间序列折线图绘制

当你有一组时间跨度很大的数据(比如20年、30年),可以通过细化X轴并清晰设置时间标签,用基础 plot() 函数来展示全貌。

以下是相关代码实现:

Matlab 复制代码
% 读取数据并保护中文列名
data = readtable('超长时间序列折线图数据.xlsx', 'Sheet', 'Sheet1', 'VariableNamingRule', 'preserve');
% 提取年份和年均气温
years = data.('年份');
temps = data.('年均气温');
% 创建白色背景图
figure('Color', 'w', 'Position', [100, 100, 1000, 500]);
% 绘制带圆点的折线图(对于大数据量建议去掉圆点或减小MarkerSize)
plot(years, temps, '-o', ...
    'LineWidth', 1.5, ...
    'MarkerSize', 3, ...
    'MarkerFaceColor', [0.2, 0.6, 1]);
% 设置坐标轴标签和标题,使用宋体11号字体
xlabel('年份', 'FontName', '宋体', 'FontSize', 11);
ylabel('年均气温 (℃)', 'FontName', '宋体', 'FontSize', 11);
title('1825-2024年年均气温变化', 'FontName', '宋体', 'FontSize', 11);
% 设置X轴刻度(每10年一个)
xticks(min(years):10:max(years));
% 设置坐标轴字体
set(gca, 'FontName', '宋体', 'FontSize', 11);
% 美化图形
grid on;
box on;
set(gca, 'LineWidth', 1);
axis tight;

折线图实现:

2. 双坐标轴折线图绘制

当你有两组具有不同单位或量纲的数据(例如"气温"和"降水量"),就可以使用双坐标轴折线图。MATLAB 提供的 yyaxis 函数可以让我们在同一张图中展示左右两侧不同的纵坐标轴。

以下是相关代码实现:

Matlab 复制代码
% 读取数据并保护中文列名
data = readtable('双坐标轴折线图数据.xlsx', 'Sheet', 'Sheet1', 'VariableNamingRule', 'preserve');
% 提取数据
years = data.('年份');
temps = data.('年均气温');
precip = data.('年降水量');
% 创建图形窗口(高分辨率)
figure('Color', 'w', 'Position', [100, 100, 1100, 500]);
% 设置统一字体为宋体
set(groot, 'defaultAxesFontName', '宋体');
set(groot, 'defaultAxesFontSize', 11);
% 左坐标轴:气温
yyaxis left
p1 = plot(years, temps, '-', ...
    'Color', [0.2, 0.45, 0.85], ...
    'LineWidth', 2);
ylabel('年均气温 (℃)', 'Color', [0.2, 0.45, 0.85], ...
       'FontName', '宋体', 'FontSize', 11);
% 右坐标轴:降水量
yyaxis right
p2 = plot(years, precip, '--', ...
    'Color', [1, 0.4, 0.2], ...
    'LineWidth', 2);
ylabel('年降水量 (mm)', 'Color', [1, 0.4, 0.2], ...
       'FontName', '宋体', 'FontSize', 11);
% 标签设置
xlabel('年份', 'FontName', '宋体', 'FontSize', 11);
title('年均气温与年降水量趋势(样本数据)', 'FontName', '宋体', 'FontSize', 12);
% 坐标轴样式
xticks(years);
xtickangle(45);
xlim([min(years) max(years)]);
grid on;
set(gca, 'GridColor', [0.85 0.85 0.85], 'GridAlpha', 0.6);
box on;
set(gca, 'LineWidth', 1.2);
% 图例设置
legend([p1, p2], {'年均气温', '年降水量'}, ...
    'Location', 'southoutside', ...
    'Orientation', 'horizontal', ...
    'Box', 'off', ...
    'FontName', '宋体', ...
    'FontSize', 10);

折线图实现(ps:一开始生成的图比较丑,可以手动调整到合适的样子):

3. 与柱形图结合的折线图绘制

当你有两组相关的数据(例如,年均气温年降水量 ),并且你希望同时展示这两个数据集的趋势与具体数值时,可以使用折线图与柱形图结合的方法。折线图用来展示数据的变化趋势,而柱形图则提供了数据的具体量,二者结合可以使图形更具表现力。在MATLAB中,你可以通过yyaxis函数来绘制双坐标轴图,这样可以分别控制左坐标轴和右坐标轴。左坐标轴可以用于展示折线图,右坐标轴则用于展示柱形图。

以下是代码示例:

Matlab 复制代码
% 读取数据并保护中文列名
data = readtable('双坐标轴折线图数据.xlsx','Sheet', 'Sheet1', 'VariableNamingRule', 'preserve');
% 提取数据
years = data.('年份');
temps = data.('年均气温');
precip = data.('年降水量');
% 创建图形窗口(高分辨率)
figure('Color', 'w', 'Position', [100, 100, 1100, 500]);
% 设置统一字体为中文宋体
set(groot, 'defaultAxesFontName', '宋体');
set(groot, 'defaultAxesFontSize', 12);
% 左坐标轴
yyaxis left
h1 = plot(years, temps, '-o', ...
    'Color', [0.4, 0.7, 1], ... 
    'LineWidth', 2, 'MarkerSize', 8, 'MarkerEdgeColor', [0.4, 0.7, 1], ... % 蓝色边框
    'MarkerFaceColor', 'none'); 
% 添加折线图数据标签
for i = 1:length(temps)
    text(years(i), temps(i), num2str(temps(i)), 'FontSize', 10, 'Color', 'k', ...
         'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'center');
end
ylabel('年均气温 (℃)', 'Color', [0.4, 0.7, 1], ...
       'FontName', '宋体', 'FontSize', 12);
% 右坐标轴:降水量(柱形图)
yyaxis right
h2 = bar(years, precip, 'FaceColor', [0.2, 0.6, 0.8], ...  
    'EdgeColor', 'none', 'BarWidth', 0.6, 'FaceAlpha', 0.4); 
% 设置右坐标轴颜色与柱形图一致
set(gca, 'YColor', [0.4, 0.7, 1]);  % 设置整个右坐标轴的颜色
ylabel('年降水量 (mm)', 'Color', [0.4, 0.7, 1], ...
       'FontName', '宋体', 'FontSize', 12);
% 设置标签
xlabel('年份', 'FontName', '宋体', 'FontSize', 12);
title('年均气温与年降水量趋势(样本数据)', 'FontName', '宋体', 'FontSize', 14);
% 设置坐标轴
xticks(years);
xtickangle(45);
xlim([min(years) max(years)]); 
grid on;
set(gca, 'GridColor', [0.85 0.85 0.85], 'GridAlpha', 0.5); 
box on;
set(gca, 'LineWidth', 1.2);
% 图例设置
legend([h1, h2], {'年均气温(折线图)', '年降水量(柱形图)'}, ...
    'Location', 'southoutside', ...
    'Orientation', 'horizontal', ...
    'FontName', '宋体', 'FontSize', 12, ...
    'Box', 'off');

折线图实现:

希望这些示例能为你今后的数据分析、教学展示或科研图表制作提供实用参考。如果你有任何问题或想法,欢迎留言交流,一起精进可视化表达的技巧!

相关推荐
做科研的周师兄36 分钟前
【MATLAB 实战】栅格数据 K-Means 聚类(分块处理版)—— 解决大数据内存溢出、运行卡顿问题
人工智能·算法·机器学习·matlab·kmeans·聚类
打点计时器2 小时前
初见波动方程和贝塞尔函数
数学建模·信号处理
hoiii1872 小时前
基于LSB匹配的隐写术MATLAB实现程序
开发语言·matlab
民乐团扒谱机3 小时前
【微实验】基于MATLAB的一维条材下料优化问题求解
数学建模·matlab·线性规划·最优化模型·整数线性规划
步达硬件3 小时前
【Matlab】批量自定义图像处理
开发语言·matlab
崇山峻岭之间3 小时前
Matlab学习记录32
开发语言·学习·matlab
机器学习之心4 小时前
MATLAB灰狼优化算法(GWO)改进物理信息神经网络(PINN)光伏功率预测
神经网络·算法·matlab·物理信息神经网络
ghie909014 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
wuk99814 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
2401_8633186317 小时前
机动车防撞击系统设计
matlab