Для диаграмм вы развиваетесь как подкласс ChartContainer базовый класс, getAxes метод обеспечивает способ поддержки одного объекта декартовых осей. Если требуется поддерживать полярные оси, географические оси или несколько осей, необходимо создать и настроить оси как дочерние для TiledChartLayout , который хранится в объекте диаграммы.
Чтобы включить в диаграмму один объект полярных осей или географических осей, выполните следующие действия.
Определите частное свойство для хранения осей.
В setup способ:
Например, здесь представлен базовый класс, содержащий объект полярных осей.
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
Чтобы отобразить мозаику из нескольких осей, выполните следующие действия.
Определите частные свойства, в которых хранятся объекты осей. Можно также определить одно свойство, которое хранит массив объектов осей.
В 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);
