【问题标题】:Subplot priority in MatlabMatlab中的子图优先级
【发布时间】:2018-11-28 15:01:57
【问题描述】:

我在回复this 问题时遇到了一个问题——有点,这更像是一种好奇心。

Matlab 子图、自动图还是位置属性谁有优先权,为什么?

我尝试了一些测试,得到了一些奇怪的结果,如下图所示,

AutoManualBoth

这是使用的代码。

a=1:10;b=a.^2;
figure
subplot('Position',[0.3,0.7,0.5,0.1]);plot(a,b,'-k');legend('Black');
subplot('Position',[0.3,0.3,0.5,0.1]);plot(a,b,'-r');legend('Red');
figure
subplot(2,1,1);plot(a,b,'-k');legend('Black');
subplot(2,1,2);plot(a,b,'-r');legend('Red');
figure
subplot(2,1,1,'Position',[0.3,0.7,0.5,0.1]);plot(a,b,'-k');legend('Black');
subplot(2,1,2,'Position',[0.3,0.3,0.5,0.1]);plot(a,b,'-r');legend('Red');

如你所见,最后一张图是乱七八糟的,在合适的位置生成了一个轴,但是使用了

使用 3 个图和与之前相同的方案(位置数变化较小),最后一个具有以下输出:

这也好不了多少。对于“仅一个情节”的情况,它遵循手动 Position 设置。

我在manual 中找到了这条注释

使用脚本创建子图时,MATLAB 不会最终确定 Position 属性值,直到发出 drawow 命令或 MATLAB 返回等待用户命令。子图的 Position 属性值可能会发生变化,直到脚本刷新图或退出。

有了这个,我对这个问题有了一个想法。仅在绘制第二个图形时调用该位置,但随后它会覆盖第一个位置调用,使第二个轴为空。在此之后,在具有 3 个图的图中,它应该在第二个图或第一个图上写入最后一个调用 green,但它会转到最后一个,正如一个最初的愿望。

作为额外的注释,这是 2017a 版本中的行为。 2016a(来自this answer)工作正常。 2018a 工作正常,但会生成有关重复输入的警告。

知道 Matlab 如何使用定义多个子图的子图方案以及产生此输出的确切原因(在这种情况下通过明显不兼容的指令举例说明)?

【问题讨论】:

    标签: matlab plot subplot


    【解决方案1】:

    我刚刚在 Matlab 2016a 中重新运行了您的脚本,我没有遇到这个问题,matlab 符合我的预期。如果您没有定义一个位置,它使用默认设置,如果您定义一个,它使用您使用的位置。通常,您手动设置的属性始终具有优先权,因为您明确定义/调用它们。 (为什么我不知道,但对我来说这似乎是逻辑思维,按照我告诉你的去做,如果我不告诉你,那就好好猜测/假设)

    还有 Matlab,定义轴的位置(子图)。在绘制子图后,它不会跟踪子图在子图系列中的位置。如果保存句柄,您可以看到这一点。唯一保存的是每个子图的轴的最终位置。列号和行号未保存在子图的句柄中(可能在父图/轴中,但我必须检查)。

    所以这可能是一个版本相关的问题,我的结果:

    【讨论】:

    • 确实应该是这样,2018a版本也是如此。我将在 2014 版本中进行测试,只是为了好奇看看行为。
    猜你喜欢
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2011-04-20
    • 2013-02-13
    • 1970-01-01
    相关资源
    最近更新 更多