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