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

news/2024/10/4 20:08:47 标签: matlab, excel, 开发语言

前言

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

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


1 三维散点图scatter3

1-1 代码解释
  • 我们直接看代码
matlab">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函数用于在三维空间中绘制散点图。其基本语法如下:
matlab">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

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

2 三维表面图 surf

2-1 代码实现
  • 先看代码
matlab">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:
matlab">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对画图操作,会出现一些问题
matlab">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 修正代码
  • 我们使用循环一次只画一列数据,最后一次换列画图,得到正确的图像
matlab">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.niftyadmin.cn/n/5690297.html

相关文章

jdk 相关网址

官方资源: OpenJDK: https://openjdk.org/ OpenJDK 官方网站 (https://openjdk.org/) 是 Java 开发者的重要资源。以下是该网站的主要内容和功能: 项目概览 OpenJDK 的介绍和目标最新版本信息 下载 源代码下载预构建二进制文件链接 文档 开发者指南AP…

【SpringBoot详细教程】-09-Redis详细教程以及SpringBoot整合Redis【持续更新】

🌲 Redis 简介 🌾 什么是Redis Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库、缓存、消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库 Redis是互联网技术领域使用最为广泛的存储中间件,它是「Remote DictionaryServic…

【Linux系统编程】权限

目录 1、shell命令以及运行原理 2、Linux权限的概念 3、Linux权限管理 3.1 文件访问者的分类(人) 3.2 文件类型和访问权限(事物属性) 4、目录的权限 5、粘滞位 1、shell命令以及运行原理 首先,我们来了解一条指令是如何跑起来的 一般操作系统是不会让用户直…

关于深度学习torch的环境配置问题

已经下好了torch在虚拟环境中,结果在ipynb文件中无法运行 后来在终端直接用python语句编译 发现没有问题 在编辑测试py文件 发现runcode有问题 原来是插件默认base环境 具体操作参考VS Code插件Code Runner使用python虚拟环境_coderunner怎么在虚拟环境中使用-CSD…

浅谈stm32的GPIO引脚配置模式

STM32的GPIO(通用输入输出)引脚可以被配置为多种模式,以适应不同的应用场景。下面介绍一些一些常见的STM32 GPIO引脚模式: 模拟输入模式(Analog Input Mode):在这种模式下,GPIO引脚被…

探索Python中的装饰器模式

引言: 在Python编程中,装饰器是一个非常重要的概念。它们提供了一种优雅的方式,能够在不修改原始函数代码的情况下,为函数添加新的功能。本文将深入探讨Python中的装饰器模式,包括其工作原理、如何创建装饰器以及如何在…

基于facefusion的换脸

FaceFusion是一个引人注目的开源项目,它专注于利用深度学习技术实现视频或图片中的面部替换。作为下一代换脸器和增强器,FaceFusion在人脸识别和合成技术方面取得了革命性的突破,为用户提供了前所未有的视觉体验。 安装 安装基础软件 安装…

带你深入浅出设计模式:五、简单工厂模式:构建软件的高效生产“流水线”

此为设计模式第五谈! 用总-分-总的结构和生活化的例子给你讲解设计模式! 码农不易,各位学者学到东西请点赞收藏支持支持! 开始部分: 总:简单工厂模式就是通过一个工厂类创建对象,减少了客户端…