exponenta event banner

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

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

См. также

Функции

Классы

Свойства

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