Desarrollar gráficas con ejes polares, geográficos o varios ejes
Para las gráficas que desarrolla como una subclase de clase básica ChartContainer
, el método getAxes
proporciona una manera de admitir un único objeto de ejes cartesianos. Si desea admitir ejes polares, geográficos o varios ejes, debe crear y configurar los ejes como elementos secundarios de un objeto TiledChartLayout
, que se almacena en el objeto de la gráfica.
Crear un único objeto de ejes polares o geográficos
Para crear un único objeto de ejes polares o geográficos en su gráfica:
Defina una propiedad privada para almacenar los ejes.
En el método
setup
:
Por ejemplo, esta es una clase básica que contiene un objeto de ejes polares.
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
Crear un mosaico de varios objetos de ejes
Para mostrar un mosaico de varios objetos de ejes:
Defina las propiedades privadas que almacenan los objetos de ejes. También puede definir una propiedad que almacene un arreglo de objetos de ejes.
En el método
setup
:Llame al método
getLayout
para obtener el objetoTiledChartLayout
.Establezca la propiedad
GridSize
del objetoTiledChartLayout
para que tenga al menos un mosaico para cada eje.Llame a la función
axes
,polaraxes
ogeoaxes
para crear los objetos de ejes y especificar el objetoTiledChartLayout
como el objeto principal.Mueva todos los ejes al mosaico deseado estableciendo la propiedad
Layout
en cada objeto de ejes. De forma predeterminada, los ejes aparecen en el primer mosaico.
Por ejemplo, esta es una clase básica que contiene dos ejes cartesianos:
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
Ejemplo: Gráfica que contiene ejes geográficos y cartesianos
Este ejemplo muestra la manera de definir una clase de gráficas para visualizar los datos geográficos y categóricos utilizando dos conjuntos de ejes. Los ejes de la izquierda contienen un mapa que muestra las ubicaciones de varias torres celulares. Los ejes de la derecha muestran la distribución de las torres por categoría.
La siguiente definición de clase TowerChart
le muestra la manera de:
Definir una propiedad pública llamada
TowerData
que almacena una tabla.Validar los contenidos de la tabla utilizando una función local llamada
mustHaveRequiredVariables
.Definir dos propiedades privadas llamadas
MapAxes
yHistogramAxes
que almacenan los ejes.Implementar un método
setup
que obtiene el objetoTiledChartLayout
, especifica el tamaño de la cuadrícula del diseño y coloca los ejes.
Para definir la clase, copie este código en el editor y guárdelo con el mismo nombre de TowerChart.m
en una carpeta grabable.
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
Después de guardar el archivo de clase, cargue la tabla almacenada en cellularTowers.mat
. Después, cree una instancia de la gráfica pasando la tabla al método del constructor TowerChart
como un argumento de par nombre-valor.
load cellularTowers.mat TowerChart('TowerData',cellularTowers);