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

一、什么是散点图

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

二、三种类型散点图

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

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

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

举个例子:

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

 适用场景总结

  • 观察趋势和相关性

  • 检查是否有异常值

  • 做初步的数据探索

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

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

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

举个例子:

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

 适用场景总结

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

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

  • 非常适合做对比分析

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

三维散点图的适用场景

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

举个例子:

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

适用场景总结:

  • 同时分析三个数值变量

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

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

三种类型散点图总结

你手上有什么数据?

用哪种散点图?

两个数字(例:身高、体重)

基本二维散点图

两个数字 + 一个分类(例:性别)

分组着色散点图

三个数字(例:身高、体重、年龄)

三维散点图

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

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

散点图类型

特别准备事项

基本二维散点图

确保两个变量都是数值型

分组着色散点图

第三个变量(分类)需为字符串或分类类型

三维散点图

三个变量都需为连续数值型,且无缺失

四、MATLAB绘制相应散点图

1. 基本二维散点图绘制

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

      以下是相关代码实现:

% 读取数据并保留原始列名,使得原本中文列名不被修改,以下用调取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() 函数,轻松画出按类别分组着色的散点图。不同类别的数据点用不同颜色区分,既直观又美观,适合展示各类数据在二维数值变量上的分布差异。

        以下是相关代码实现:

% 读取数据并保留原始列名,使得原本中文列名不被修改
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() 函数,轻松绘制出按类别分组着色的三维散点图。不同类别的数据点用不同颜色标识,在三维空间中直观展示出变量之间的立体分布关系,特别适合用来观察多变量之间的联合趋势与类别间的结构差异。

        以下是相关代码实现:

% 读取数据并保留原始列名,使得原本中文列名不被修改
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 绘制不同的散点图。可视化不仅让数据更易于理解,也为后续的数据分析和交流打下了良好基础。如果你也在处理类似的多变量数据,不妨动手试一试,让图形为你的分析加分!(如有不对的地方也可以指出哦~) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模块方法模式(Module Method Pattern)

🧠 模块方法模式(Module Method Pattern) 模块方法模式是一种结构型设计模式,它将复杂的操作分解成一系列相对简单、独立且单一职责的模块。每个模块负责完成一种具体的操作,其他模块或系统可以通过调用这些模块的公开…

Python中的JSON库,详细介绍与代码示例

目录 1. 前言 2. json 库基本概念 3. json 的适应场景 4. json 库的基本用法 4.1 导 json入 模块 4.2 将 Python 对象转换为 JSON 字符串 4.3 将 JSON 字符串转换为 Python 对象 4.4 将 Python 对象写入 JSON 文件 4.5 从 JSON 文件读取数据 4.6 json 的其他方法 5.…

网狐旗舰大联盟组件源码私测笔记:结构分层、UI重构与本地实操全流程

作为一套衍生于传统网狐架构的源码版本,大联盟这套源码组件可谓是在经典基础上进行了深度重塑。与老版死板的框架风格不同,它不仅对界面做了大刀阔斧的重构,还在组件层级的组织上做了优化。本文将基于一整套源码进行深度解析,强调…

STM32 PulseSensor心跳传感器驱动代码

STM32CubeMX中准备工作: 1、设置AD 通道 2、设置一个定时器中断,间隔时间2ms,我这里采用的是定时器7 3、代码优化01 PulseSensor.c文件 #include "main.h" #include "PulseSensor/PulseSensor.h"/******************…

C++项目容易犯错的点

1. 矩阵q要先定义大小&#xff0c;再赋值。不可以直接赋值。下面这种方式是错误的Eigen::MatrixXd q&#xff1b;q<<1,2&#xff1b;正确的这样的&#xff1a; Eigen::MatrixXd q(2,1); q<<1.4, 1.5; 2. 不要重复加载variables.h头文件&#xff0c;这样变量会被…

在阿里云 Ubuntu 24.04 上部署 RabbitMQ:一篇实战指南

前言 RabbitMQ 是业界常用的开源消息中间件,支持 AMQP 协议,易于部署、高可用、插件丰富。本文以阿里云 ECS 上运行的 Ubuntu 24.04 LTS 为例,手把手带你完成 RabbitMQ 从仓库配置到运行的全流程,并分享在国内环境下常见的坑与对应解决方案。 环境概况 操作系统:Ubuntu …

【论文笔记】SOTR: Segmenting Objects with Transformers

【题目】&#xff1a;SOTR: Segmenting Objects with Transformers 【引用格式】&#xff1a;Guo R, Niu D, Qu L, et al. Sotr: Segmenting objects with transformers[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 7157-7166. 【网…

MinIO实现https访问

Windows下实现MinIO的https访问. 首先需要自己解决证书问题, 这里可以是个人证书 也可以是花钱买的证书. 现在使用个人开发者证书举例子。 将证书数据解压到你知道的目录之下 然后直接使用命令启动MinIO start minio.exe server --certs-dir D:\xxxxx\tools\certs …

基于 jQuery 实现灵活可配置的输入框验证功能

在 Web 表单开发中&#xff0c;输入框验证是保障数据准确性和安全性的关键环节。无论是用户注册、信息提交还是数据录入场景&#xff0c;都需要对用户输入内容进行合法性检查。本文将介绍如何使用 HTML、CSS 和 jQuery 构建一个可灵活配置的输入框验证系统&#xff0c;轻松应对…

Kotlin 04Flow stateIn 和 shareIn的区别

一 Kotlin Flow 中的 stateIn 和 shareIn 一、简单比喻理解 想象一个水龙头&#xff08;数据源&#xff09;和几个水杯&#xff08;数据接收者&#xff09;&#xff1a; 普通 Flow&#xff08;冷流&#xff09;&#xff1a;每个水杯来接水时&#xff0c;都要重新打开水龙头从…

WebRTC 服务器之SRS服务器概述和环境搭建

1.概述 SRS&#xff08;Simple Realtime Server&#xff09;是一款高性能、跨平台的流媒体服务器&#xff0c;支持多种协议&#xff0c;包括 RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH 和 GB28181。本文介绍了 SRS&#xff0c;包括其用途、关键功能、架构和支持协议。SRS 旨…

Dify - Embedding Rerank

注意&#xff1a;v100显卡会出现不适配&#xff0c;不推荐使用 1. 安装 Docker ubuntu 22.04 docker 安装&使用_ubuntu22.04 安装docker-CSDN博客 2. 安装vllm pip install -U xformers torch torchvision torchaudio triton --index-url https://download.pytorch.org/w…

LeetCode:链表的中间结点

1、题目描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff…

LabVIEW温控系统热敏电阻滞后问题

在 LabVIEW 构建的温控系统中&#xff0c;热敏电阻因热时间常数大&#xff08;2 秒左右&#xff09;产生的滞后效应&#xff0c;致使控温出现超调与波动。在不更换传感器的前提下&#xff0c;可从算法优化、硬件调整和系统设计等维度着手解决。 ​ 一、算法优化​ 1. 改进 PI…

技术犯规计入个人犯规吗·棒球1号位

在棒球运动中&#xff0c;虽然没有“技术犯规”这一特定术语&#xff0c;但存在多种违规行为或违反规则的情况&#xff0c;通常会导致判罚或处罚。以下是常见的违规行为及相关规则&#xff1a; 1. 投手违规&#xff08;Balk&#xff09; 定义&#xff1a;投手在垒上有跑垒员时…

Python核心技巧 类与实例:面向对象编程的基石

、核心概念图解 &#x1f3af; 类 vs 实例 类&#xff1a;对象的蓝图&#xff08;如"汽车设计图"&#xff09; 实例&#xff1a;类的具体实现&#xff08;如"你的特斯拉Model 3"&#xff09; class MyClass: # 类声明 count 0 # 类…

协程补充---viewModelScope 相关知识点

viewModelScope.launch 默认在 Dispatchers.Default 线程池执行Dispatchers.Default 是一个后台线程池&#xff0c;专门用于 CPU 密集型任务如果需要在主线程执行&#xff0c;必须显式指定 Dispatchers.Main remember 是 Compose 的状态管理函数(queueMenus) 是依赖项&#xff…

linux stm32mp157 GIC-V2 中断处理过程分析

/* ** 中断触发时&#xff0c;调用的 handle_arch_irq 入口地址。 ** 因为此时&#xff0c;挂接的就是 gic_handle_irq 函数&#xff01;gic_handle_irq 是个全局函数指针&#xff0c; ** static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) ** 它是Lin…

动态指令参数:根据组件状态调整指令行为

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

直方图比较

目录 1、直方图比较的概念 2、直方图比较的主要原因 3、典型应用场景 4、基础直方图比较 5、多通道直方图比较 6、实时直方图检测 1、直方图比较的概念 直方图比较是通过数学方法计算两个直方图之间的相似度或差异度的技术。在计算机视觉中&#xff0c;直方图是对图像特征…