Разрабатывайте графики с полярными осями, географическими осями или несколькими осями

Для графиков вы разрабатываете как подкласс ChartContainer базовый класс, getAxes метод предоставляет способ поддержки одного Декартова объекта осей. Если необходимо поддержать полярные оси, географические оси или несколько осей, необходимо создать и сконфигурировать оси как дочерние элементы TiledChartLayout объект, который хранится в объекте графика.

Создайте один полярный или географический Объект осей

Чтобы включить в график одну полярные оси или географический объект осей:

  1. Задайте частную собственность для хранения осей.

  2. В setup метод:

    • Вызовите getLayout метод получения TiledChartLayout объект.

    • Вызовите polaraxes или geoaxes функция для создания осей и определения TiledChartLayout объект как родительский объект.

Например, вот основной класс, который содержит объект полярных осей.

classdef SimplePolar < matlab.graphics.chartcontainer.ChartContainer
    properties(Access = private,Transient,NonCopyable)
        PolarAx matlab.graphics.axis.PolarAxes
    end
    
    methods(Access = protected)
        function setup(obj)
            % Get the layout and create the axes
            tcl = getLayout(obj);
            obj.PolarAx = polaraxes(tcl);
            
            % Other setup code
            % ...
        end
        function update(obj)
            % Update the chart
            % ...
        end
    end
end

Создайте плиточное размещение из нескольких объектов осей

Чтобы отобразить плиточное размещение из нескольких осей:

  1. Задайте частную собственность, которые хранят объекты осей. Можно также задать одно свойство, которое хранит массив объектов осей.

  2. В setup метод:

    • Вызовите getLayout метод получения TiledChartLayout объект.

    • Установите GridSize свойство TiledChartLayout объект так, чтобы он имел по меньшей мере одну плитку для каждой из осей.

    • Вызовите axes, polaraxes, или geoaxes функция для создания объектов осей и определения TiledChartLayout объект как родительский объект.

    • Переместите каждую из осей в нужную плитку путем установки Layout свойство для каждого объекта осей. По умолчанию оси появляются в первой плитке.

Например, вот основной класс, который содержит две Декартовы оси:

classdef TwoAxesChart < matlab.graphics.chartcontainer.ChartContainer
    properties(Access = private,Transient,NonCopyable)
        Ax1 matlab.graphics.axis.Axes
        Ax2 matlab.graphics.axis.Axes
    end
    
    methods(Access = protected)
        function setup(obj)
            % Get the layout and set the grid size
            tcl = getLayout(obj);
            tcl.GridSize = [2 1];
            
            % Create the axes
            obj.Ax1 = axes(tcl);
            obj.Ax2 = axes(tcl);
            
            % Move the second axes to the second tile
            obj.Ax2.Layout.Tile = 2;
        end
        function update(obj)
            % Update the chart
            % ...
        end
    end
end

Пример: График, содержащая географическую и декартову ось

В этом примере показано, как задать класс графиков для визуализации географических и категориальных данных с помощью двух осей. Левые оси содержат карту, показывающую местоположение нескольких сотовых башен. Правые оси показывают распределение башен по категориям.

Следующая TowerChart определение класса показывает, как:

  • Задайте общественную собственность под названием TowerData который хранит таблицу.

  • Проверьте содержимое таблицы с помощью локальной функции mustHaveRequiredVariables.

  • Задайте две частной собственности, называемых MapAxes и HistogramAxes который хранит оси.

  • Реализуйте setup метод, который получает TiledChartLayout объект, задает размер сетки размещения и размещает оси.

Чтобы определить класс, скопируйте этот код в редактор и сохраните его с именем TowerChart.m в папке с возможностью записи.

classdef TowerChart < matlab.graphics.chartcontainer.ChartContainer
    properties
        TowerData (:,:) table {mustHaveRequiredVariables} = table([],...
            [],[],'VariableNames',{'STRUCTYPE','Latitude','Longitude'})
    end
    
    properties (Access = private,Transient,NonCopyable)
        MapAxes matlab.graphics.axis.GeographicAxes
        HistogramAxes matlab.graphics.axis.Axes
        ScatterObject matlab.graphics.chart.primitive.Scatter
        HistogramObject matlab.graphics.chart.primitive.categorical.Histogram
    end
    
    methods (Access = protected)
        function setup(obj)
            % Configure layout and create axes
            tcl = getLayout(obj);
            tcl.GridSize = [1 2];
            obj.MapAxes = geoaxes(tcl);
            obj.HistogramAxes = axes(tcl);
            
            % Move histogram axes to second tile
            obj.HistogramAxes.Layout.Tile = 2;
            
            % Create Scatter and Histogram objects
            obj.ScatterObject = geoscatter(obj.MapAxes,NaN,NaN,'.');
            obj.HistogramObject = histogram(obj.HistogramAxes,categorical.empty,...
                'Orientation','horizontal');
            
            % Add titles to the axes
            title(obj.MapAxes,"Tower Locations")
            title(obj.HistogramAxes,"Tower Types")
            xlabel(obj.HistogramAxes,"Number of Towers")
        end
        
        function update(obj) 
            % Update Scatter object
            obj.ScatterObject.LatitudeData = obj.TowerData.Latitude;
            obj.ScatterObject.LongitudeData = obj.TowerData.Longitude;
            
            % Get tower types from STRUCTYPE table variable
            towertypes = obj.TowerData.STRUCTYPE;
            
            % Check for empty towertypes before updating histogram
            if ~isempty(towertypes)
                obj.HistogramObject.Data = towertypes;
                obj.HistogramObject.Categories = categories(towertypes);
            else
                obj.HistogramObject.Data = categorical.empty;
            end
        end
    end
end

function mustHaveRequiredVariables(tbl)
% Return error if table does not have required variables
assert(all(ismember({'STRUCTYPE','Latitude','Longitude'},...
    tbl.Properties.VariableNames)),...
    'MATLAB:TowerChart:InvalidTable',...
    'Table must have STRUCTYPE, Latitude, and Longitude variables.');
end

После сохранения файла класса загружает таблицу, хранящуюся в cellularTowers.mat. Затем создайте образец графика, передав таблицу в TowerChart метод конструктора как аргумент пары "имя-значение".

load cellularTowers.mat
TowerChart('TowerData',cellularTowers);

См. также

Функции

Классы

Свойства

Похожие темы