【问题标题】:How can I plot objects outside of an axes using Line or annotation objects in MATLAB?如何在 MATLAB 中使用 Line 或 annotation 对象绘制轴外的对象?
【发布时间】:2019-06-19 15:20:48
【问题描述】:

我想在 MATLAB 图中的轴外的每个数据点处创建一条带有圆形标记的线,类似于什么

line([x1 x2],[y1 y2],'Color','k','Marker','o')

会产生。

要将线对象放置在轴之外,我只是尝试使用annotation

annotation('line',phi1([x1 x2]),phi2([y1 y2]),'Color','k','Marker','o')

其中phi1phi2 是适当的坐标变换,以适应当前图形的轴内的坐标xy

我希望这可以工作,因为线对象具有marker 属性。但是,使用annotation,我收到以下错误消息:

Error using matlab.graphics.shape.Line/set
There is no Marker property on the Line class.

Error in matlab.graphics.chart.internal.ctorHelper (line 8)
    set(obj, pvpairs{:});

Error in matlab.graphics.shape.Line

Error in annotation (line 128)
        h = matlab.graphics.shape.Line(aargs{:});

同样,当使用annotation 函数绘制矩形时,不能设置Curvature 属性。似乎annotation 不支持这些类型的属性,即使它像linerectangle 函数那样创建一个直线或矩形对象。我尝试摆弄注释句柄和子项,但没有成功。

有什么解决方法的想法吗?

【问题讨论】:

    标签: matlab plot properties annotations matlab-figure


    【解决方案1】:

    different types of annotation objects 是一组与通常的 linerectangle 对象不同的类类型,支持一组减少的属性。例如,典型的line 对象的类类型为matlab.graphics.primitive.Line,而注释行对象的类类型为matlab.graphics.shape.Line

    您可以简单地将linerectangle 对象的'Clipping' property 设置为'off',而不是使用annotation 对象,以允许它们在轴限制之外单独渲染。例如这段代码:

    hAxes = subplot(1, 2, 1);
    axis(hAxes, [0 1 0 1]);    % Freeze axis limits
    hLine = line([0.5 2], [0.5 0.5], 'Color', 'k', ...
                                     'Marker', 'o', ...
                                     'Clipping', 'off');
    hRect = rectangle(hAxes, 'Position', [1.5 0.1 1 0.25], ...
                             'Curvature', [0.2 0.2], ...
                             'FaceColor', 'r', ...
                             'Clipping', 'off');
    

    产生这个情节:

    或者,您可以通过将 'Clipping' property 转换为 'off' 来关闭轴的 所有 对象的剪裁。

    【讨论】:

    • 所以它们是不同的类;那讲得通。 Type 属性是否以某种方式与类相关?
    • @LuisMendo:我不确定用于Type 属性的字符串是否总是与给定的对象类唯一相关。我猜它应该是,但不能肯定地说是不是。我相信Type属性主要用于使用findobj等搜索对象。
    • @Luis:我认为Type 属性是 HG1 时代的产物,为了向后兼容而保留。它曾经是了解图形对象类型的唯一方法。
    • @LuisMendo:在对象上调用class 会返回我上面列出的两种不同的类类型。我相信在旧的 HG1 手柄上调用 class 只会给你 double
    • @gnovice 这样就解决了,谢谢!所以这只是默认显示(在命令窗口中输入变量名),两者都显示line
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2011-10-21
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多