如何将多个一维图像绘制成一张三维图像?基于matlab实现

使用背景

当我们有多个时间序列或者类似的数据,如何将他们绘制在同一张三维图像中,方便观察呢?

实现方法

主要借助matlab中的plot3函数,该函数可以在三维空间绘制图像,必须的参数就是三个轴的序列。本文以时间序列为例,如果有多个一维的时间序列,合并时x轴可以是个数,y轴可以是时间,z轴可以是幅值。表示个数的这一个轴,对应的是第几个数据,只需要将该轴设置为i*ones(size(t))即可,如果是第三个数据,则表示这一列都为3。

  • 结果图
    如何将多个一维图像绘制成一张三维图像?基于matlab实现_第1张图片

仿真实现

clc;clear all;close all;
%% 仿真数据
fs=100;
t=0:1/fs:1-1/fs;
x1=0.8*sin(2*pi*5*t);
x2=0.6*sin(2*pi*10*t-0.2);
x3=0.5*sin(2*pi*15*t+0.1);
x4=0.4*cos(2*pi*20*t+0.3);
x5=0.35*sin(2*pi*30*t+0.3);
%将仿真的五个时间序列放在一个二维矩阵data中,便于后期控制;
data = [x5;x4;x3;x2;x1];

%% 绘图
N = size(data,1);  %数据的个数
cmap = hsv(N);     %产生对应的颜色个数,可以给每一个分量赋值不一样的颜色
%% 绘制三维图
figure;
hold on;
for i = 1:1:N
    %LineWidth:线的粗细
    plot3(i*ones(size(t)),t,data(i,:),'Color',cmap(i,:),'LineWidth',1.5);
end
grid on;
view(3);
pos=axis;  
xlabel('个数','FontName','Microsoft YaHei Mono','FontSize',12,'position',[(pos(1)+pos(2))/2 pos(3)-0.2 pos(5)]);
ylabel('时间','FontName','Microsoft YaHei Mono','FontSize',12,'position',[pos(1)-0.5 (pos(3)+pos(4))/2 pos(5)]);
zlabel('幅值','FontName','Microsoft YaHei Mono','FontSize',12);


说明

  • hsv函数:用于产生指定颜色个数的colorbar,n*3,用于后面给每个线条指定不一样的颜色
  • axis给出的是坐标轴的x y z的坐标边界【x轴最小值 x轴最大值 y轴最小值~ …】便于后面利用该坐标值控制坐标显示的文字的位置。

其它结果图实例

如何将多个一维图像绘制成一张三维图像?基于matlab实现_第2张图片

你可能感兴趣的:(信号处理,matlab,数据分析)