如何在matlab中使用一个x轴一个接一个地绘制几个图形?

时间:2015-08-02 13:12:39

标签: matlab

我在几个时间点有10个相同数据的图。我想在一个matlab图中显示数据随时间的演变。我试图用子图(10,1,i)显示它,其中我从1到10,以便在另一个之下得到几个图。但是我不希望每个情节都有自己的轴。它是多余的,只占用重要的空间,使得地块本身在y方向上非常小。我宁愿用一个x轴将它显示为一个在另一个下面的多个图。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

我通常只做以下

figure('Position',[x,y,w,b]);
for i = 1:10
    subplot('Position',[x2,y2-i*sc,w2,b2])
    plot here
    xl = get(gca,'XTickLabel');
    set(gca,'XTickLabel','')
    ylabel('bla')
end
set(gca,'XTickLabel',xl)
xlabel('bla2')

figure中,您可以使用x y wb设置所需的数字位置和大小。通过将参数'Position',[x2,y2-i*sc,w2,b2]与子图一起使用,可以将子图放在任何位置。可以调整此值以减少绘图之间的空白区域。这样你可以非常接近地移动它们。它确实需要一些调整,因为你必须调整sc以便绘图不重叠。

这是一个任意的例子:

figure('Position',[10,10,500,800]);
sc = 0.09;
for i = 1:10
    subplot('Position',[0.1,0.99-i*sc,0.75,0.075])
    plot(1:10)
    xl = get(gca,'XTickLabel');
    set(gca,'XTickLabel','')
    ylabel('bla')
end
set(gca,'XTickLabel',xl)
xlabel('bla2')   

生成此图像:

enter image description here

答案 1 :(得分:0)

您必须手动调整10个不同矢量中每个矢量的y值,以便通过向每组y值添加一些值来将它们堆叠在彼此之上。
通常最简单的方法是将最大y值的倍数添加到每个向量,以便第二次迭代向上移动最多1次(y),第三次迭代向上移动2 * max(y),依此类推,保证它们不会相互重叠。
您还可以将每个向量标准化为1或100或任何值,并将第2到第10个向量移动该值的倍数。

然后,为了使y轴符合堆叠的y值,您可以通过重置YTickYTickLabel值来提交自己的y轴刻度位置和标签,例如:

set(gca, 'YTick', [0,5,10,15,20,25],'YTickLabel',{'0','5','0','5','0','5'});

选择当前轴,并将输入向量应用于YTickYTickValues属性。

这也在这里的文档中解释: http://www.mathworks.com/help/matlab/ref/axes-properties.html

这不是非常方便但是如果你要经常这样做,编写一个自动化它的脚本或函数并不会太麻烦,你也可能习惯于操纵轴和图形属性如果你想经常想要更复杂的情节。