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

Для графиков вы разрабатываете как подкласс 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);

Смотрите также

Функции

Классы

Свойства

Похожие темы