使用MATLAB将.csv生成的几个2D图堆叠成3D图

时间:2018-01-15 13:42:19

标签: matlab csv plot

我有代码从存储在几个.csv文件中的数据生成2D绘图:

clearvars;
files = dir('*.csv');
name = 'E_1';
set(groot, 'DefaultLegendInterpreter', 'none')
set(gca,'FontSize',20)
hold on;
for file = files'
    csv = xlsread(file.name);
    [n,s,r] = xlsread(file.name);
    des_cols = {'Stress','Ext.1(Strain)'};
    colhdrs = s(2,:);
    [~,ia] = intersect(colhdrs, des_cols);
    colnrs = flipud(ia);
    file.name = n(:, colnrs);
    file.name = file.name(1:end-500,:);
    plot(file.name(:,2),file.name(:,1),'DisplayName',s{1,1});
end
ylabel({'Stress (MPa)'});
xlabel({'Strain (%)'});
title({name});
legend('show');

我想要做的是修改代码,以便将.csv数据制作的2D绘图连接到3D绘图中,其中一个轴是files类似.csv的索引这张post顶部的图片。我想到了使用该帖子中的plot3,但我不确定如何让它发挥作用。

根据我的理解,我需要创建3个新矩阵xMat, yMat, zMat。每个矩阵的列包含来自csv文件的数据,而yMat包含的列只是csv的索引,但我不完全确定从何处开始。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以在循环中调用plot3,如下所示。基本上将Y值更改为Z值。然后,对于循环的每次迭代,将Y递增1。

figure;
a = axes;
grid on;
hold(a,'on');
x = 0:.1:4*pi;
for ii = 1:10    
    plot3(a,x,ones(size(x))*ii,sin(x)); 
end
view(40,40)

修改代码看起来如下所示。请注意,由于我没有你的CSV,我无法测试任何这些。

clearvars;
files = dir('*.csv');
name = 'E_1';
set(groot, 'DefaultLegendInterpreter', 'none')
set(gca,'FontSize',20)
a = gca;
hold on;
ii = 1;
for file = files'
    csv = xlsread(file.name);
    [n,s,r] = xlsread(file.name);
    des_cols = {'Stress','Ext.1(Strain)'};
    colhdrs = s(2,:);
    [~,ia] = intersect(colhdrs, des_cols);
    colnrs = flipud(ia);
    file.name = n(:, colnrs);
    file.name = file.name(1:end-500,:);
    plot3(a,file.name(:,2),ones(size(file.name(:,2))).*ii,file.name(:,1),'DisplayName',s{1,1});
    ii = ii+1;
end
view(40,40);
ylabel({'Stress (MPa)'});
xlabel({'Strain (%)'});
title({name});
legend('show');