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