Как я могу построить объекты за пределами осей, используя объекты линии или аннотации в MATLAB? - PullRequest
3 голосов
/ 19 июня 2019

Я хочу создать линию с круглыми маркерами в каждой точке данных вне осей на рисунке MATLAB, аналогично тому, что

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

выдаст.

Чтобы разместить линейный объектвне осей я просто попытался использовать annotation:

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

, где phi1 и phi2 - соответствующие преобразования координат, чтобы соответствовать координатам x и y внутри осейтекущий показатель.

Я ожидал, что это сработает, поскольку линейные объекты имеют свойство 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 не поддерживает эти виды свойств, даже несмотря на то, что он создает линейный или прямоугольный объект точно так же, как функции line или rectangle.Я попытался возиться с ручками аннотаций и детьми, но безуспешно.

Есть идеи для обхода?

1 Ответ

6 голосов
/ 19 июня 2019

различные типы объектов аннотаций представляют собой отдельный набор типов классов, чем обычные line или rectangle объекты, поддерживающие сокращенный наборсвойств.Например, типичный объект line имеет тип класса matlab.graphics.primitive.Line, но объект строки аннотации имеет тип класса matlab.graphics.shape.Line.

Вместо использования annotation объектов,Вы можете просто установить 'Clipping' свойство объектов line и rectangle на 'off', чтобы они могли индивидуально отображаться за пределами осей.Например, этот код:

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');

Создает этот график:

enter image description here

В качестве альтернативы, вы можете отключить отсечение для все объекты осей, повернув свойство 'Clipping' осей до 'off'.

...