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