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

发布于:2025-05-10 ⋅ 阅读:(16) ⋅ 点赞:(0)

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

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

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

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

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

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

举个例子:

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

适用场景总结

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

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

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

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

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

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

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

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

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

举个例子:

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

适用场景总结

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

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

  • 避免图形失真或误导

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

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

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

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

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

举个例子:

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

适用场景总结

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

  • 同时可视化数量和趋势

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

三种进阶折线图类型总结

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

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

针对三种进阶折线图的数据需求

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

三、MATLAB绘制相应折现图

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

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

       以下是相关代码实现:

% 读取数据并保护中文列名
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 函数可以让我们在同一张图中展示左右两侧不同的纵坐标轴。

       以下是相关代码实现:

% 读取数据并保护中文列名
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函数来绘制双坐标轴图,这样可以分别控制左坐标轴和右坐标轴。左坐标轴可以用于展示折线图,右坐标轴则用于展示柱形图。

        以下是代码示例:

% 读取数据并保护中文列名
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');

折线图实现:

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


网站公告

今日签到

点亮在社区的每一天
去签到