当前位置: 首页 > article >正文

【Matlab绘图】从Excel导入表格并进行三维绘图

前言

  • 今天手头上拿到一份论文的xlsx数据,要求使用MATLAB绘制进行三维图标坐标绘制。那么我们来看看如何使用如下数据进行绘图。请添加图片描述

  • 如上数据所示,数据是一个30行25列的数据,数据的内容是论文某项模型模拟的结果,我们希望把横坐标x取值30行,纵坐标y取值20列,而其横纵坐标对应的表格数值设置为z。


1 三维散点图scatter3

1-1 代码解释
  • 我们直接看代码
clc;
clear all;
filename = 'data.xlsx'; 
T = readtable(filename);
dataMatrix = table2array(T);

z=[dataMatrix];
[x, y]=meshgrid(1:size(z,1),1:size(z,2));
xx=x(:); 
yy=y(:); 
zz=z(:); 
scatter3(xx,yy,zz,'filled');
  • clc;clear all;
    • clc; 命令用于清除MATLAB命令窗口中的所有输出,以便开始一个干净的新会话。
    • clear all; 命令用于清除工作空间中的所有变量,释放内存。
  • dataMatrix = table2array(T);:将表格 T 转换为矩阵 dataMatrix
  • [x, y] = meshgrid(1:size(z,1),1:size(z,2));meshgrid 函数用于生成网格点坐标。这里,它生成了两个矩阵 xy,它们的大小与 z 相同。x 矩阵的每个元素表示网格点的x坐标,y 矩阵的每个元素表示网格点的y坐标。size(z,1)size(z,2) 分别返回矩阵 z 的行数和列数。也就是30和25
  • xx=x(:);yy=y(:);zz=z(:);将矩阵 xyz 转换为列向量 xxyyzz。这是因为 scatter3 函数需要输入向量的形式,而不是矩阵。
1-2 scatter3函数API
  • scatter3函数用于在三维空间中绘制散点图。其基本语法如下:
scatter3(x, y, z)
scatter3(x, y, z, s)
scatter3(x, y, z, s, c)
scatter3(..., 'filled')
  • xyz:这三个参数分别代表三维空间中的x、y、z坐标。
  • s:可选参数,用于设置每个散点的大小。默认值为36平方点。
  • c:可选参数,用于设置每个散点的颜色。可以是一个颜色值或颜色映射。
  • 'filled':可选参数,用于填充散点。
1-3 效果展示
  • 请添加图片描述

  • 值得注意的是如果使用的是MATLAB 2013a 版本之前的版本,readtable 函数是不可用的,需要替换为底下的xlsread

[dataMatrix, txt, raw] = xlsread(filename); 

2 三维表面图 surf

2-1 代码实现
  • 先看代码
clc;
clear all;
filename = 'data.xlsx'; 
[dataMatrix, txt, raw] = xlsread(filename); % 生成网格
[x, y] = meshgrid(1:size(dataMatrix, 2), 1:size(dataMatrix, 1)); % 生成网格,注意行列的顺序% 创建三维表面图,使用 'scatter' 形式来近似散点图
surf(x, y, dataMatrix, 'EdgeColor', 'none', 'Marker', 'o', 'MarkerSize', 5);
xlabel('X Axis');
ylabel('Y Axis');
zlabel('Data Value');
title('3D Surface Plot with Scatter Points');
view(60, 45); 
  • view(60, 45); 是调整视角,这个函数允许用户设置视角的仰角(elevation angle)和方位角(azimuth angle)。
    • 仰角(elevation angle):这是从 x 轴正方向开始测量的角度,范围通常是从 -90° 到 90°。0° 表示从正面看,90° 表示从顶部看,-90° 表示从底部看。
    • 方位角(azimuth angle):这是从正 y 轴开始测量的角度,范围通常是从 0° 到 360°。0° 或 360° 表示从正方向看,90° 表示从左侧看,180° 表示从背面看,270° 表示从右侧看。
2-2 surf函数API
  • MATLAB中的surf函数用于创建三维曲面图。以下是surf函数的详细API:
surf(X,Y,Z)
surf(X,Y,Z,C)
surf(Z)
surf(...,PropertyName,PropertyValue,...)
h = surf(...)
  • surf(X,Y,Z):使用矩阵XYZ来绘制三维曲面图。XY定义网格点的x和y坐标,Z定义网格点的z坐标。
  • surf(X,Y,Z,C):使用矩阵XYZC来绘制三维曲面图。C用于指定颜色数据,如果未提供,则使用与Z相同的数据。
  • surf(Z):当Z是一个矩阵时,surf函数会自动生成网格线,并使用Z的列数和行数作为x和y坐标。
  • surf(...,PropertyName,PropertyValue,...):允许您使用名称-值对参数来设置曲面图的属性。例如,您可以使用'EdgeColor'属性来设置边缘颜色。
  • h = surf(...):返回曲面图的句柄,以便您可以对其进行进一步的修改。
2-3 效果展示
  • 2012版本请添加图片描述

  • 新版---------------------------------------请添加图片描述


3 三维折线图plot3

3-1 问题描述
  • 直接使用plot3对画图操作,会出现一些问题
clc;
clear all;
filename='data.xlsx'
[dataMatrix, txt, raw] = xlsread(filename); 
z=[dataMatrix]
[x, y] = meshgrid(1:size(dataMatrix, 2), 1:size(dataMatrix, 1));
xx = x(:);
yy = y(:);
zz = z(:); 
plot3(xx, yy, zz);

grid on; 
  • 由于是连续画点连线,导致每换到下一列的时候上一列结尾的数据和下一列的开头连在一起了,这是我们不希望的。请添加图片描述
3-2 修正代码
  • 我们使用循环一次只画一列数据,最后一次换列画图,得到正确的图像
clc;
clear all;
filename='data.xlsx'
[dataMatrix, txt, raw] = xlsread(filename); 

for col = 1:25
% 提取当前列的数据
z = dataMatrix(1:30, col);
% 创建网格
[x, y] = meshgrid(1:30,col);
xx = x(:); 
yy = y(:); 
zz = z(:);
% 绘制当前列的数据
plot3(xx, yy, zz); 
xlabel('X 坐标');
ylabel('Y 坐标');
zlabel('Z 值');
grid on; 
hold on; % 保持当前图形,以便在同一图形上绘制下一个列的数据

pause(0.5);
end
3-3 效果展示
  • 2012版本请添加图片描述

  • 新版----------------------------------------请添加图片描述


4 总结

  • 本文介绍了三种绘制MATLAB三维点图的方法,三维散点图scatter3,三维表面图surf, 三维折线图plot3
  • 如有错误,欢迎指出,感谢大家的支持!
    请添加图片描述

http://www.kler.cn/news/331966.html

相关文章:

  • STM32F407之SPI
  • java基础知识汇总
  • 网络编程篇:UDP协议
  • Linux 进程状态、僵尸进程与孤儿进程
  • 在阿里工作是一种什么体验?
  • HBase 的二级索引和配置实现
  • JVM内存回收机制
  • [大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择
  • 损失函数篇 | YOLOv10 更换损失函数之 MPDIoU | 《2023 一种用于高效准确的边界框回归的损失函数》
  • Spring Boot 应用Kafka讲解和案例示范
  • 职业技术学校开设无人机培训技术详解
  • ultralytics-yolo-webui :Detect 目标检测 工具-先行版本 >> DataBall
  • scrapy爬取汽车、车评数据【中】
  • 回归预测 | Matlab基于POA-SVR鹈鹕算法优化支持向量机的数据多输入单输出回归预测
  • 基于多维统计分析与GMM聚类的食品营养特征研究
  • Chainlit集成LlamaIndex并使用通义千问实现和数据库交互的网页对话应用(text2sql)
  • 关于Mac管理员root权限的一些问题总结
  • Android 简单实现联系人列表+字母索引联动效果
  • VUE 开发——Node.js学习(一)
  • Chapter02