В этом примере показано, как задать класс графиков, которые могут отобразить любое количество линий на основе размера данных пользователя. Отображения графика столько же линий сколько существуют столбцы в YData
матрица. Для каждой линии график вычисляет локальные экстремальные значения и указывает на их местоположения с круговыми маркерами. Следующий код демонстрирует как к:
Задайте два свойства под названием PlotLineArray
и ExtremaArray
это хранит объекты для линий и маркеров, соответственно.
Реализуйте update
метод, который заменяет содержимое PlotLineArray
и ExtremaArray
свойства с новыми объектами. Поскольку этот метод выполняет весь графический вывод и команды настройки, setup
метод пуст.
Можно использовать этот пример, чтобы познакомиться с методами кодирования разработки графика, или как основание для класса, который вы планируете разработать.
Чтобы задать класс, скопируйте этот код в редактор и сохраните его с именем LocalExtremaChart.m
в перезаписываемой папке.
classdef LocalExtremaChart < matlab.graphics.chartcontainer.ChartContainer properties XData (1,:) double = NaN YData (:,:) double = NaN MarkerColor (1,3) double {mustBeGreaterThanOrEqual(MarkerColor,0),... mustBeLessThanOrEqual(MarkerColor,1)} = [1 0 0] MarkerSize (1,1) double = 5 end properties(Access = private,Transient,NonCopyable) PlotLineArray (:,1) matlab.graphics.chart.primitive.Line ExtremaArray (:,1) matlab.graphics.chart.primitive.Line end methods(Access = protected) function setup(~) end function update(obj) % get the axes ax = getAxes(obj); % Plot Lines and the local extrema obj.PlotLineArray = plot(ax,obj.XData,obj.YData); hold(ax,'on') % Replicate x-coordinate vectors to match size of YData newx = repmat(obj.XData(:),1,size(obj.YData,2)); % Find local minima and maxima and plot markers tfmin = islocalmin(obj.YData,1); tfmax = islocalmax(obj.YData,1); obj.ExtremaArray = plot(newx(tfmin),obj.YData(tfmin),'o',... newx(tfmax),obj.YData(tfmax),'o',... 'MarkerEdgeColor',obj.MarkerColor,... 'MarkerFaceColor',obj.MarkerColor,... 'MarkerSize',obj.MarkerSize); hold(ax,'off') end end end
После того, чтобы сохранить файл класса можно создать экземпляр графика. Например:
x = linspace(0,3); y1 = cos(5*x)./(1+x.^2); y2 = -cos(5*x)./(1+x.^3); y3 = sin(x)./2; y = [y1' y2' y3']; c = LocalExtremaChart('XData',x,'YData',y);
Измените размер маркера в 8
.
c.MarkerSize = 8;