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

7
我有多个FFT图形,希望将它们放在一个图形中展示,就像附图所示。 我不知道从哪里开始。希望能得到帮助!

你有哪些图形?你用什么代码生成这些图形? - Yvon
2个回答

9
这并不难做。您可以使用plot3来帮助您进行这种绘图。使用plot3,您需要将每个图的y值变为z值,并且如果您想要分离这些图形,则需要在此3D图中改变y值。让我们举个例子。比如说我想把四个图放在一个单独的图中,这些图是:
  • 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 关键在于构造正确的矩阵,以便将其正确地放入plot3中。 plot3的工作方式是,您可以将单个向量放入x,y,z值中,或者您可以使用xMat,yMat,zMat矩阵。每个xMatyMatzMat矩阵的每一列表示要放置在绘图中的单个跟踪。因此,每个信号的xMat的每一列都进入一个单独的列。因此,我为我的x值创建了一个向量,并将它们复制了多次,直到我们有尽可能多的信号。在本例中,我们有4个信号。必须以不同的方式处理y值。您需要确定可以允许的每个信号之间的间距有多少。我选择了0.001用于每个信号。因此,我相应地创建了存储在yMat中的矩阵,每个列分别表示00.0010.0020.003z值将是放置在不同列中的每个信号的y值,我使用zMat创建了这些值。
您需要尝试调整此内容以获取正确的间距和每个轴的正确边界,但这应该可以帮助您入门。 祝你好运!

谢谢Ray,这正是我想要的! - Farbod
@Farbod - 不用谢!我也在我的帖子下面放了一份更详细的解释。看一下我的修改吧。 - rayryeng
@Abhinav 你正在查看一个“瀑布”图。这篇文章可能会有所帮助:http://stackoverflow.com/questions/29322617/how-to-plot-a-3d-graph-of-2d-fft-tranformations-with-a-changing-parameter/29325233#29325233 - rayryeng
@rayryeng 我不确定这对我是否有效,因为曲线1和曲线2在相同的x值上没有定义。我应该在带有NaN的曲线中放入缺失的z值,然后绘图吗? - Abhinav
@rayryeng 好的,我明白了。我只需要为每条曲线单独使用plot3函数。 - Abhinav
显示剩余11条评论

2
为了提高@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接