MATLAB制作散点图:从基础到进阶的三种类型讲解

一、什么是散点图

散点图是一种用来展示两个或多个变量之间关系的图表形式。它可以帮助我们直观地观察变量之间是否存在相关性、趋势或异常值,常用于数据分析的初步探索阶段。

二、三种类型散点图

1. 基本二维散点图:最简单、最常用

基本二维散点图的适用场景

当你手头只有两个连续的数字变量,比如"身高"和"体重",或者"价格"和"销量",想看它们之间有没有关系时,用这个最合适。

举个例子:

你想知道一个人身高越高,是不是体重也越重?那你就画个散点图,把"身高"当横轴,"体重"当纵轴,点一画上去,图就出来了。如果点大致排成一条斜线,那就说明:它们有关!

适用场景总结

  • 观察趋势和相关性

  • 检查是否有异常值

  • 做初步的数据探索

2. 按类别分组着色的散点图:比较不同"群体"的差异

按类别分组着色的散点图的适用场景

当你有两个数值变量(比如"身高"和"体重"),但你还知道每个人是男生还是女生,或者是来自不同城市的。你想对比不同群体在这些数值上的分布,这时候就需要分组着色的散点图。

举个例子:

你把男性的数据点涂成蓝色,女性的数据点涂成红色,一下就能看出:女生更集中在某个区域,男生在哪里分布更广,等等。

适用场景总结

  • 分类变量(性别、地区、类型)+ 两个数值变量

  • 想看不同群体的差异或分布趋势

  • 非常适合做对比分析

3. 三维散点图:一次看三个数字变量

三维散点图的适用场景

你现在不仅有"身高"和"体重",还有"年龄",想看三者之间有没有关系。这时候就可以用三维散点图。它比二维图多了一个维度,可以在空间中呈现点的"走向"。

举个例子:

你在一张 3D 图里看出:随着年龄增加,身高先升后降,体重慢慢变大------这种复杂的关系,二维图是看不出来的。

适用场景总结:

  • 同时分析三个数值变量

  • 适合探索复杂的多变量关系

  • 更适合有交互式可视化支持的场景

|-------------------|-----------------|
| 你手上有什么数据? | 用哪种散点图? |
| 两个数字(例:身高、体重) | 基本二维散点图 |
| 两个数字 + 一个分类(例:性别) | 分组着色散点图 |
| 三个数字(例:身高、体重、年龄) | 三维散点图 |
[### 三种类型散点图总结]

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

针对三种类型的散点图数据需求

|---------------|-------------------------|
| 散点图类型 | 特别准备事项 |
| 基本二维散点图 | 确保两个变量都是数值型 |
| 分组着色散点图 | 第三个变量(分类)需为字符串或分类类型 |
| 三维散点图 | 三个变量都需为连续数值型,且无缺失 |

四、MATLAB绘制相应散点图

1. 基本二维散点图绘制

只要两个数值变量,比如"身高"和"体重",用最基础的 scatter() 函数就能搞定。

以下是相关代码实现:

Matlab 复制代码
% 读取数据并保留原始列名,使得原本中文列名不被修改,以下用调取excel表格为例
data = readtable('散点图制作.xlsx', 'sheet', 'sheet1', 'VariableNamingRule', 'preserve');
x = data.('身高');
y = data.('体重');
% 创建图形窗口
figure('Color', 'w');
% 绘制较小圆点的散点图,以下数据大小可以按需更改
scatter(x, y, 40, ...  % 点大小改为40(点较小,可以按照需求更改)
    'MarkerEdgeColor', [0.3 0.5 0.7], ...% 点的边缘颜色设为蓝灰色
    'MarkerFaceColor', [0.5 0.7 0.9], ...% 点的填充颜色为淡蓝色
    'MarkerFaceAlpha', 0.6, ...% 点的透明度设置为 0.6
    'LineWidth', 0.6);  % 线条粗细
hold on
% 拟合数据后,添加趋势线(浅红虚线)
p = polyfit(x, y, 1);
yfit = polyval(p, x);
plot(x, yfit, '--', 'Color', [1 0.4 0.4], 'LineWidth', 1.5);% 颜色粗细也均可更改
% 标签和标题字体大小与类型(字体略小,可自我调整)
xlabel('身高 (cm)', 'FontSize', 11,'FontWeight', 'bold','FontName', '宋体')
ylabel('体重 (kg)', 'FontSize', 11,'FontWeight', 'bold','FontName', '宋体')
title('身高与体重的关系', 'FontSize', 13, 'FontWeight', 'bold','FontName', '宋体')
% 图例(去边框,略小字体)
legend({'数据点', '趋势线'}, 'Location', 'southeast', 'Box', 'off', 'FontSize', 10)
% 网格和坐标轴美化
grid on
box off
set(gca, 'FontSize', 10, 'LineWidth', 1, 'TickDir', 'out')

散点图实现:

2. 按类别分组着色的散点图绘制

需要有两个数值变量,比如"身高"和"体重",再加上一个分类变量(比如"性别"),就可以通过循环搭配 scatter() 函数,轻松画出按类别分组着色的散点图。不同类别的数据点用不同颜色区分,既直观又美观,适合展示各类数据在二维数值变量上的分布差异。

以下是相关代码实现:

Matlab 复制代码
% 读取数据并保留原始列名,使得原本中文列名不被修改
data = readtable('散点图制作.xlsx', 'sheet', 'sheet2', 'VariableNamingRule', 'preserve');
x = data.('身高');
y = data.('体重');
group = data.('性别');  % 分类变量提取,按照实际情况修改
% 获取唯一类别标签
groups = unique(group);
colors = lines(length(groups));  
% 创建图形窗口
figure('Color', 'w');
hold on;
% 按类别绘制散点图并添加拟合线
for i = 1:length(groups)
    idx = strcmp(group, groups{i});  % 当前类别的数据索引
    % 绘制较小圆点的散点图,以下数据大小可以按需更改
    scatter(x(idx), y(idx), 40, ...
        'MarkerEdgeColor', [0.2 0.2 0.2], ...
        'MarkerFaceColor', colors(i, :), ...
        'MarkerFaceAlpha', 0.6, ...
        'LineWidth', 0.6, ...
        'DisplayName', groups{i});  % 设置图例
    % 拟合线(每组单独)
    p = polyfit(x(idx), y(idx), 1);           
    xfit = linspace(min(x(idx)), max(x(idx)), 100);  
    yfit = polyval(p, xfit);                  
    plot(xfit, yfit, '--', ...
        'Color', colors(i, :), ...
        'LineWidth', 1.5, ...
        'DisplayName', [groups{i} ' - 拟合线']); 
end
% 坐标轴标签和标题(字体可按需修改)
xlabel('身高 (cm)', 'FontSize', 11, 'FontWeight', 'bold', 'FontName', '宋体')
ylabel('体重 (kg)', 'FontSize', 11, 'FontWeight', 'bold', 'FontName', '宋体')
title('不同性别的身高与体重关系(含趋势线)', 'FontSize', 13, 'FontWeight', 'bold', 'FontName', '宋体')
% 图例
legend('Location', 'southeast', 'Box', 'off', 'FontSize', 10)
% 网格和坐标轴美化
grid on
box off
set(gca, 'FontSize', 10, 'LineWidth', 1, 'TickDir', 'out')

散点图实现:

3. 三维散点图的绘制

需要有三个数值变量,比如"身高"、"体重"和"年龄",再加上一个分类变量(比如"性别"),就可以通过循环搭配 scatter3() 函数,轻松绘制出按类别分组着色的三维散点图。不同类别的数据点用不同颜色标识,在三维空间中直观展示出变量之间的立体分布关系,特别适合用来观察多变量之间的联合趋势与类别间的结构差异。

以下是相关代码实现:

Matlab 复制代码
% 读取数据并保留原始列名,使得原本中文列名不被修改
data = readtable('散点图制作.xlsx', 'sheet', 'sheet3', 'VariableNamingRule', 'preserve');
x = data.('身高');
y = data.('体重');
z = data.('年龄');      % 增加的第三个数值变量
group = data.('性别');  % 分类变量
% 类别和颜色
groups = unique(group);
colors = lines(length(groups));
% 图形窗口
figure('Color', 'w', 'Position', [100 100 800 600]);
hold on;
ax = gca;
ax.Color = [0.97 0.97 0.97];
ax.GridColor = [0.8 0.8 0.8];
ax.GridAlpha = 0.4;
% 绘制三维散点图,以下数据可以按需修改
for i = 1:length(groups)
    idx = strcmp(group, groups{i});
    scatter3(x(idx), y(idx), z(idx), 60, ...
        'MarkerEdgeColor', [0.3 0.3 0.3], ...
        'MarkerFaceColor', colors(i,:), ...
        'MarkerFaceAlpha', 0.7, ...
        'LineWidth', 0.7, ...
        'DisplayName', groups{i});
end
% 标签和标题字体大小与类型(字体略小,可自我调整)
xlabel('身高 (cm)', 'FontSize', 12, 'FontWeight', 'bold', 'FontName', '宋体');
ylabel('体重 (kg)', 'FontSize', 12, 'FontWeight', 'bold', 'FontName', '宋体');
zlabel('年龄 (岁)', 'FontSize', 12, 'FontWeight', 'bold', 'FontName', '宋体');
title('不同性别的身高、体重与年龄三维分布', ...
    'FontSize', 14, 'FontWeight', 'bold', 'FontName', '宋体');
legend('Location', 'northeastoutside', 'Box', 'off', 'FontSize', 10);
% 美化坐标轴
view(45, 20);
grid on;
box on;
rotate3d on;
axis tight;
set(gca, 'FontSize', 10, 'FontName', '宋体', 'LineWidth', 1, 'TickDir', 'out');
camproj perspective;

散点图实现:

通过上面的案例示范,相信大家已经了解了如何利用 MATLAB 绘制不同的散点图。可视化不仅让数据更易于理解,也为后续的数据分析和交流打下了良好基础。如果你也在处理类似的多变量数据,不妨动手试一试,让图形为你的分析加分!(如有不对的地方也可以指出哦~)

相关推荐
passionSnail1 小时前
《MATLAB实战训练营:从入门到工业级应用》工程实用篇-自动驾驶初体验:车道线检测算法实战(MATLAB2016b版)
算法·matlab·自动驾驶
__lost10 小时前
引力透镜效应添加光线弯曲程度可视化层的MATLAB代码
开发语言·matlab·引力势场·引力透镜·广义性对论
小天数模13 小时前
【2025五一数学建模竞赛A题】 支路车流量推测问题|建模过程+完整代码论文全解全析
数学建模
灏瀚星空13 小时前
鞅理论:从数学基石到金融工程的量化革命
笔记·python·学习·数学建模·信息可视化·金融·矩阵
灏瀚星空17 小时前
基于Python开发Markdown兼容公式格式转换工具
笔记·python·数学建模·金融
小天数模1 天前
【2025五一数学建模竞赛B题】 矿山数据处理问题|建模过程+完整代码论文全解全析
数学建模
小文数模1 天前
2025五一数学建模竞赛B题完整分析论文(共42页)(含模型、可运行代码、数据)
python·数学建模·matlab
小文数模1 天前
2025五一数学建模竞赛A题完整分析论文(共45页)(含模型、可运行代码、数据)
python·数学建模·matlab
smppbzyc1 天前
2025年五一数学建模A题【支路车流量推测】原创论文讲解
数学建模·五一数学建模·2025五一数学建模·2025五一数学建模a题·数学建模小白