В этом примере показано, как задать класс графиков, которые могут отобразить любое количество линий на основе размера данных пользователя. Отображения графика столько же линий сколько существуют столбцы в YData
матрица. Для каждой линии график вычисляет локальные экстремальные значения и указывает на их местоположения с круговыми маркерами. Следующий код демонстрирует как к:
Задайте два свойства под названием PlotLineArray
и ExtremaArray
это хранит объекты для линий и маркеров, соответственно.
Реализуйте update
метод, который заменяет содержимое PlotLineArray
и ExtremaArray
свойства с новыми объектами. Поскольку этот метод выполняет весь графический вывод и команды настройки, setup
метод пуст. Это - простой способ создать любое количество линий. Чтобы изучить, как создать этот график более эффективно путем многократного использования существующих объектов линии, смотрите Оптимизированный Класс Графика для Отображения Переменного Количества Линий.
Чтобы задать класс, скопируйте этот код в редактор и сохраните его с именем LocalExtremaChart.m
в перезаписываемой папке.
classdef LocalExtremaChart < matlab.graphics.chartcontainer.ChartContainer % c = LocalExtremaChart('XData',X,'YData',Y,Name,Value,...) % plots one line with markers at local extrema for every column of matrix Y. % You can also specify the additonal name-value arguments, 'MarkerColor' % and 'MarkerSize'. properties XData (1,:) double = NaN YData (:,:) double = NaN MarkerColor {validatecolor} = [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(ax,newx(tfmin),obj.YData(tfmin),'o',... newx(tfmax),obj.YData(tfmax),'o',... 'MarkerEdgeColor','none',... '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;