首页 > 解决方案 > 在同一个图中绘制多个相似数据

问题描述

我想生成一个图(X vs Y),Z值取决于Y。示例如下图所示。X 的矩阵大小与 Z 相同,但与 Y 不同。我可以针对 X 绘制 Z,但我想将所有图组合成一个图并成为 Y 对 X。我可以将多个图绘制成一个图,但是图是相互重叠的。

我的问题是有什么方法可以将多个图合并为一个图而不重叠每个图,因为每个图之间的差异非常小(例如 Z1=1,2,3,4,5 和 Z2=1.0001,2.0002,3.0001, 4.0002,5.0001)。所以,我想将每个 Z 图设置在不同的 Y 轴上。(例如 Y=0 时的 Z1,Y=2 时的 Z2 ...)

在此处输入图像描述 在此处输入图像描述

有没有人有任何建议或想法?

谢谢你

标签: matlabplot

解决方案


我会澄清我在评论中写的想法。首先,让我们获取一些数据:

x = 470:0.1:484;
z1 = cos(x)/2;
z2 = sin(x)/3;
z3 = cos(x+0.2)/2.3;

我将只绘制三个数据集,所有这些对于扩展到任意数量的数据集都是微不足道的。

思路一:多轴

这里的想法只是用来subplot创建一个小型多类型图:

ytick = [-0.5,0.0,0.5];
ylim = [-0.9,0.9]);
figure

h1 = subplot(3,1,1);
plot(x,z1);
set(h1,'ylim',ylim,'ytick',ytick);
title('z1')

h2 = subplot(3,1,2);
plot(x,z2);
set(h2,'ylim',ylim,'ytick',ytick);
title('z2')

h3 = subplot(3,1,3);
plot(x,z3);
set(h3,'ylim',ylim,'ytick',ytick);
title('z3')

在此处输入图像描述

请注意,例如,可以从顶部两个图中删除刻度标签,只在底部留下标签。然后,您还可以移动轴,使它们靠得更近(如果在同一个图中有很多这些线,这可能是必要的):

set(h1,'xticklabel',[],'box','off')
set(h2,'xticklabel',[],'box','off')
set(h3,'box','off')
set(h1,'position',[0.13,0.71,0.8,0.24])
set(h2,'position',[0.13,0.41,0.8,0.24])
set(h3,'position',[0.13,0.11,0.8,0.24])
axes(h1)
title('')
ylabel('z1')
axes(h2)
title('')
ylabel('z2')
axes(h3)
title('')
ylabel('z3')

在此处输入图像描述

想法 2:相同的轴,带偏移量的绘图

这是更简单的方法,因为您只处理单个轴。@Zizy Archer 已经展示了如果它们都在一个 2D 矩阵中,那么转移数据是多么容易Z。在这里,我将只绘制z1z2+2z3+4。根据您的喜好调整偏移量。接下来,我设置'ytick'属性以创建单独图形的错觉,并设置'yticklabel'属性以使沿 y 轴的数字与绘制的实际数据相匹配。最终结果类似于上面的多轴图,但它们都在一个轴上:

figure
plot(x,z1);
hold on
plot(x,z2+2);
plot(x,z3+4);
ytick = [-0.5,0.0,0.5];
set(gca,'ytick',[ytick,ytick+2,ytick+4]);
set(gca,'yticklabel',[ytick,ytick,ytick]);
text(484.5,0,'z1')
text(484.5,2,'z2')
text(484.5,4,'z3')

在此处输入图像描述


推荐阅读