在MATLAB中将多个2D图堆叠成单个3D图

时间:2014-07-28 01:01:03

标签: matlab

我有多个FFT图,我想在一个图中一起显示它们,如附图所示。

enter image description here

我不知道如何开始。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:6)

这并不是那么糟糕。您可以使用plot3来帮助您进行此类绘图。使用plot3,您需要做的是为每个绘图y值设置z值,如果要分隔图形,则需要更改{y此3D图中的值为1}}。我们举个例子。假设我想以这种方式在一个图上放置4个图形。图表是:

  • y = sin x
  • y = cos x
  • y = exp(-x)*sin(x)
  • y = exp(-x)*cos(x)

因此,您将拥有一组x个值,这些值对于每个图都是相同的。您将拥有一组y值,这些值将不同,并且取决于图表本身。您将这些值设为z,然后对于每个图表,您将拥有不同的y值,但对于每个图表,它们所有都相同,因为你要使用它们来相应地偏移每个图形以将它们分开。就这样:

%// Define the x values
x = (0:0.001:10).';
xMat = repmat(x, 1, 4); %// For plot3

%// Define y values
y = 0:0.001:0.003;
yMat = repmat(y, numel(x), 1); %//For plot3

%// Define z values
z1 = sin(x);
z2 = cos(x);
z3 = exp(-x).*sin(x);
z4 = exp(-x).*cos(x);
zMat = [z1 z2 z3 z4]; %// For plot3

plot3(xMat, yMat, zMat, 'b'); %// Make all traces blue
grid;
xlabel('x'); ylabel('y'); zlabel('z');
view(40,40); %// Adjust viewing angle so you can clearly see data

这是我得到的数字:

enter image description here


诀窍是形成正确的矩阵,以便正确地进入plot3plot3的工作原理是,您可以将单个向量放入x,y,z值,也可以使用矩阵 xMat,yMat,zMatxMatyMatzMat的每个矩阵的每列表示将单个跟踪放置在您的图中。因此,每个信号的每列xMat都会进入一列。因此,我为x值创建了一个向量,并将它们复制到我们所拥有的信号中。在这种情况下,我们有4个信号。 y值必须以不同方式播放。你需要弄清楚每个信号之间允许多少间距。我为每个信号选择了0.001。因此,我创建了该矩阵,相应地存储在yMat中,每列代表00.0010.0020.003。对于我使用z创建的不同列中的每个信号,y值将是您的zMat值。

你需要玩这个以获得正确的间距和每个轴的右边界,但这应该让你开始。祝你好运!

答案 1 :(得分:1)

为了提高@rayryeng答案中创建的绘图的可读性,还可以在每行下方添加白色条纹,以阻挡更深的线条(DZ控制条纹宽度,设置为Z轴跨度的10% ):

ZL = zlim(gca);
DZ = 0.1*(ZL(2)-ZL(1));
for k=1:size(xMat,2);
    hPatch(k) = patch( ...
        [xMat(:,k);    flipud(xMat(:,k))   ], ...
        [yMat(:,k);    flipud(yMat(:,k))   ], ...
        [zMat(:,k);    flipud(zMat(:,k))-DZ], ...
        'w');
    set(hPatch(k), 'EdgeColor','none', 'FaceColor','w', 'FaceAlpha',0.9 );
end
axis tight