exponenta event banner

Класс диаграммы с переменным количеством строк

В этом примере показано, как определить класс диаграмм, которые могут отображать любое количество строк в зависимости от размера данных пользователя. Диаграмма отображает столько строк, сколько столбцов в 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;

См. также

Классы

Связанные темы