我有多个FFT图,我想在一个图中一起显示它们,如附图所示。
我不知道如何开始。任何帮助将不胜感激!
答案 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
这是我得到的数字:
诀窍是形成正确的矩阵,以便正确地进入plot3
。 plot3
的工作原理是,您可以将单个向量放入x,y,z
值,也可以使用矩阵 xMat,yMat,zMat
。 xMat
,yMat
和zMat
的每个矩阵的每列表示将单个跟踪放置在您的图中。因此,每个信号的每列xMat
都会进入一列。因此,我为x
值创建了一个向量,并将它们复制到我们所拥有的信号中。在这种情况下,我们有4个信号。 y
值必须以不同方式播放。你需要弄清楚每个信号之间允许多少间距。我为每个信号选择了0.001
。因此,我创建了该矩阵,相应地存储在yMat
中,每列代表0
,0.001
,0.002
或0.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