%% 2021.11.28-由w.m.ying整理,如有不明白的地方可以邮件咨询 wmying033@126.com。
%此代码主要是完成二维数据和图像数据在同一个空间内的堆叠绘图,如果需要origin绘图的-
% 也可以参考bili博主“爱问吱吱”的视频:https://space.bilibili.com/386697953/?spm_id_from=333.999.0.0
% 本代码图像堆叠部分为参考文件夹2中博主给出的代码实现,也在文件夹2中给出了源代码。
% 帮助完成本代码整理的参考网址也已经给出,有兴趣可以查看
% https://callmejacky.blog.csdn.net/article/details/84799411
% https://www.ilovematlab.cn/thread-474412-1-1.html
% https://zhuanlan.zhihu.com/p/383800605
% https://blog.csdn.net/fyf18845165207/article/details/103619611
% https://blog.csdn.net/weixin_32536777/article/details/116442207?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link
% 感谢以上作者的贡献
%所有代码都已测试,可以执行,执行环境matlab 2017a
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 二维数据的plot
% 可以画EMD等多个分量的时域和包络谱三维图,这里针对二维数据
%如可对信号数据EMD分解后的几个模态分量进行三维展示。
%这里imf 为(6,2000)的double数组,可根据自己的数据进行参数修改
%% 1这里是画横坐标是数据点
close all;clc;clear all;
load imf.mat;
[X,Y] = meshgrid(1:size(imf,1),1:size(imf,2)); %建立 x,y 坐标网格
Z = imf(1:6,:); %选择要显示的时域信号数据
figure;
plot3(X,Y,Z); %这里就是画三维了,plot3(X,Y,Z,'b'),b表示颜色,可以自己更改需要的颜色
grid on; %显示网格,若不需要则 grid off;
%给x,y,z加上标签
xlabel('IMF数量');
ylabel('数据点');
zlabel('幅值');
%设置标签的角度
view(3)
x1=xlabel('IMF数量');
y1=ylabel('数据点');
set(x1,'Rotation',18); %这里的角度可以根据自己实际需要进行调整
set(y1,'Rotation',-30);
%设置字体和大小
set(gca,'FontName','Serif');
set(gca,'fontsize',12);
%% 2 这里是画横坐标是时间
close all;clc;clear all;
load imf.mat;
N=length(imf);
t=linspace(0,1,N);
[X,Y] = meshgrid(1:size(imf,1),t); %建立 x,y 坐标网格
Z = imf(1:6,:); %选择要显示的时域信号数据
figure;
plot3(X,Y,Z); %这里就是画三维了,plot3(X,Y,Z,'b'),b表示颜色,可以自己更改需要的颜色
grid on; %显示网格,若不需要则 grid off;
%给x,y,z加上标签
xlabel('IMF数量');
ylabel('时间');
zlabel('幅值');
%设置标签的角度
view(3)
x1=xlabel('IMF数量');
y1=ylabel('时间');
set(x1,'Rotation',18); %这里的角度可以根据自己实际需要进行调整
set(y1,'Rotation',-30);
%设置字体和大小
set(gca,'FontName','Serif');
set(gca,'fontsize',12);
%% 接下来是图像堆叠
%%%%%%%%%%%%%%%%%%%%%%%
%% 3三维数据的plot,沿着X轴画图
%需要将多张图片堆叠在一起在三维空间进行展示
close all;clc;clear all;
load q.mat;
% 这里如果你有多个变量需要用循环执行的话,就可以
a=zeros(101,101,3);%先申请变量空间;这里这个设置是针对我的数据集来设置的,不清楚的可以搜一下这个合并数组的用法
a(:,:,1)=q1; %赋值
a(:,:,2)=q2;
a(:,:,3)=q3;
%这时a就是你想要的3维矩阵
k1=0; %从x=0位置开始画图
[y,z] = meshgrid(0:0.1:10,-1:0.1:9);%产生网格,这是根据我的数据去做的,可以根据自己需要修改
for k2=1:3
x = k1*ones(size(y));
b = surf(x,y,z,a(:,:,k2));
% colorbar;
shading interp;
grid on;
set(b,'linestyle','none');%隐藏网格
view(3);hold on;
k1=k1+40;
end
% daspect([2,2,5]);%调节坐标轴比例, 具体可以参考 https://ww2.mathworks.cn/help/matlab/ref/daspect.html
%x,y,z轴的标签就不在写了,上面已经写了步骤
%% 4三维数据的plot,沿着Z轴画图 (形如此的都可以修改,如可以修改为沿着Y轴画)
%需要将多张图片堆叠在一起在三维空间进行展示
close all;clc;clear all;
load q.mat;
% 这里如果你有多个变量需要用循环执行的话,就可以
a=zeros(101,101,3);%先申请变量空间;这里这个设置是针对我的数据集来设置的,不清楚的可以搜一下这个合并数组的用法
a(:,:,1)=q1; %赋值
a(:,:,2)=q2;
a(:,:,3)=3;
%这时a就是你想要的3维矩阵
k1=0; %从x=0位置开始画图
[x,y] = meshgrid(0:0.1:10,-1:0.1:9);%产生网格,这是根据我的数据去做的,可以根据自己需要修改
for k2=1:3
z = k1*ones(size(y));
b = surf(x,y,z,a(:,:,k2));
% colorbar;
shading interp;
grid on;
set(b,'linestyle','none');%隐藏网格
view(3);hold on;
k1=k1+40; %调整间隔
end
% daspect([10,10,1.5]);%调节坐标轴比例, 具体可以参考 https://ww2.mathworks.cn/help/matlab/ref/daspect.html
%% 5!!当然你要是想有矩阵每次单独的执行也是可以的,上面只是给一个建议,方便出图
close all;clc;clear all;
load q.mat;
k1=0; %从x=0位置开始画图
[y,z] = meshgrid(0:0.1:10,-1:0.1:9);%产生网格,这是根据我的数据去做的,可以根据自己需要修改
x = k1*ones(size(y));
b = surf(x,y,z,q1); %在这一步每次把q1更换成你想画的就行
%colorbar;
shading interp;
grid on;
set(b,'linestyle','none');%隐藏网格
view(3);hold on;
k1=k1+40;
%% 6如果有需要对已经形成的图片进行处理,可以参考文件夹2中的代码
% 代码来自网址:
% https://download.csdn.net/download/leo881026/4190910,下载的和文件2中的是一样的,所以没必要下载了。
%不需要自己重新下载,下载的就是文件夹2中的代码
评论5