【问题标题】:How to plot several graphs in matlab one below the other with one x-axis?如何在 matlab 中用一个 x 轴绘制多个图形,一个在另一个之下?
【发布时间】:2015-08-02 13:12:39
【问题描述】:

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

【问题讨论】:

  • 我知道这不是您问题的答案(因此仅发表评论),但随着越来越重要的数字您可能需要考虑 matlab 之外的其他选项(而 matlab 方便快捷对于简单的数字,如果你想要一些与众不同的东西,它也会变得凌乱而且仍然很丑)。如果你熟悉 LaTeX,我建议熟悉 pgfplots(在 PGF/TikZ 中实现),你可以用它(官方gallery)绘制漂亮的东西,包括你想要的。诚然,这很难掌握,但值得。

标签: matlab


【解决方案1】:

我通常只做以下事情

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] 与 subplot 一起使用,您可以将子图放置在您想要的任何位置。这可以调整以减少绘图之间的空白。这样,您可以将它们非常靠近地移动。不过,它确实需要一些调整,因为您必须调整 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')   

生成此图像:

【讨论】:

  • 这没有回答问题。 OP 说他尝试了subplot,但不喜欢结果,并询问如何在同一个axes 中绘制所有这些曲线。 (虽然我同意原来的问题可以改进
  • @Hoki 你这么认为吗?现在我实际上不再确定 OP 到底想要什么。但是在重新阅读问题后,您可能是对的。
【解决方案2】:

您必须手动调整 10 个不同向量中的每一个的 y 值,以便通过向每组 y 值添加一些值来将它们堆叠在一起。
通常最简单的方法是将最大 y 值的倍数添加到每个向量,这样第二次迭代向上移动 1 倍 max(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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多