【问题标题】:How to draw vertical line on axes in Matlab GUI?如何在 Matlab GUI 中的轴上绘制垂直线?
【发布时间】:2012-07-18 01:32:05
【问题描述】:

我有一个带有 3 个轴组件的 Matlab GUI。他们的标签是predicted_axcost_axerror_ax。我想在第一个轴组件(带有标签predicted_ax 的那个)的特定位置绘制垂直线。我该怎么做?

我试过这段代码:

ylim = get(handles.predicted_ax, 'ylim');
line([linePos, linePos], ylim);

但它在不同的轴上画线(带有标签error_ax的轴)!我确定我没有混淆标签或轴组件。事实上另一个测试

ylim = get(handles.cost_ax, 'ylim');
line([linePos, linePos], ylim);

给出完全相同的结果:这条线绘制在最后一个带有标签error_ax 的坐标区组件上。那么如何在右轴上画线呢?

【问题讨论】:

    标签: matlab user-interface drawing matlab-guide axes


    【解决方案1】:

    您需要设置线的'parent'属性,默认情况下它将始终是当前轴:

    h = line([linePos, linePos], ylim);
    set(h, 'parent', handles.predicted_ax);
    

    【讨论】:

    • 这是最好的答案。每条线都有一个父轴。如果您没有为 line() 函数提供轴句柄,则默认情况下会将线附加到“当前”轴。这就是为什么 axes(handles.predicted_ax) 起作用的原因。它使 predict_ax 成为当前轴,因此您之后创建的任何线都将其作为默认父级。但是,我觉得将线的“父”属性设置为要附加到的轴要清楚得多。一般来说,当您有更清晰的选项可用时,依赖使用当前坐标轴 (gca) 或当前图形 (gcf) 绝不是一个好主意。
    • 作为旁注。您可以像这样在一个电话中完成所有操作:line([linePos, linePos], ylim, 'Parent', handles.predicted_ax)
    • @cholland 如果它有效,那将是最好的答案。但事实并非如此。
    • @cholland 但是,如果我按照您的建议进行操作,它确实有效 - 在一次通话中创建线路并设置父级。
    • 他的大部分是正确的,我应该说这个想法是正确的。他唯一缺少的是handles.predicted_ax 部分。这就是他的意思:h = line([linePos, linePos], ylim); set(h, 'parent', handles.predicted_ax);
    【解决方案2】:

    我认为您需要使用axes 命令来设置将在其上绘制线的当前轴。在您的line 命令之前尝试axes(handles.predicted_ax);

    (获取轴的ylim 值显然不会使其成为当前值。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2015-04-04
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      相关资源
      最近更新 更多