我在几个时间点有10个相同数据的图。我想在一个matlab图中显示数据随时间的演变。我试图用子图(10,1,i)显示它,其中我从1到10,以便在另一个之下得到几个图。但是我不希望每个情节都有自己的轴。它是多余的,只占用重要的空间,使得地块本身在y方向上非常小。我宁愿用一个x轴将它显示为一个在另一个下面的多个图。我怎样才能做到这一点?
答案 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
w
和b
设置所需的数字位置和大小。通过将参数'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')
生成此图像:
答案 1 :(得分:0)
您必须手动调整10个不同矢量中每个矢量的y值,以便通过向每组y值添加一些值来将它们堆叠在彼此之上。
通常最简单的方法是将最大y值的倍数添加到每个向量,以便第二次迭代向上移动最多1次(y),第三次迭代向上移动2 * max(y),依此类推,保证它们不会相互重叠。
您还可以将每个向量标准化为1或100或任何值,并将第2到第10个向量移动该值的倍数。
然后,为了使y轴符合堆叠的y值,您可以通过重置YTick
和YTickLabel
值来提交自己的y轴刻度位置和标签,例如:
set(gca, 'YTick', [0,5,10,15,20,25],'YTickLabel',{'0','5','0','5','0','5'});
选择当前轴,并将输入向量应用于YTick
和YTickValues
属性。
这也在这里的文档中解释: http://www.mathworks.com/help/matlab/ref/axes-properties.html
这不是非常方便但是如果你要经常这样做,编写一个自动化它的脚本或函数并不会太麻烦,你也可能习惯于操纵轴和图形属性如果你想经常想要更复杂的情节。