Main Content

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:

  1. Defina una propiedad privada para almacenar los ejes.

  2. En el método setup:

    • Llame al método getLayout para obtener el objeto TiledChartLayout.

    • Llame a la función polaraxes o geoaxes para crear los ejes y especifique el objeto TiledChartLayout como el objeto principal.

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:

  1. Defina las propiedades privadas que almacenan los objetos de ejes. También puede definir una propiedad que almacene un arreglo de objetos de ejes.

  2. En el método setup:

    • Llame al método getLayout para obtener el objeto TiledChartLayout.

    • Establezca la propiedad GridSize del objeto TiledChartLayout para que tenga al menos un mosaico para cada eje.

    • Llame a la función axes, polaraxes o geoaxes para crear los objetos de ejes y especificar el objeto TiledChartLayout 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 y HistogramAxes que almacenan los ejes.

  • Implementar un método setup que obtiene el objeto TiledChartLayout, 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);

Consulte también

Funciones

Clases

Propiedades

Temas relacionados