Controlar la visualización de un histograma categórico
Este ejemplo muestra cómo utilizar histogram
para ver de manera efectiva los datos categóricos. Puede utilizar los mismos pares nombre-valor 'NumDisplayBins'
, 'DisplayOrder'
y 'ShowOthers'
para cambiar la forma en la que se muestra un histograma categórico. Estas opciones le ayudan a organizar mejor los datos y a reducir el ruido de la gráfica.
Crear un histograma categórico
El archivo de ejemplo outages.csv
contiene datos que representan los cortes de suministro de las compañías eléctricas en Estados Unidos. El archivo está compuesto de seis columnas: Region
, OutageTime
, Loss
, Customers
, RestorationTime
y Cause
.
Lea el archivo outages.csv
como una tabla. Utilice la opción 'Format'
para especificar el tipo de datos que contiene cada columna: categóricos ('%C'
), números en puntos flotantes ('%f'
) o fecha/hora ('%D'
). Indexe las primeras filas de datos para ver las variables.
data_formats = '%C%D%f%f%D%C'; C = readtable('outages.csv','Format',data_formats); first_few_rows = C(1:10,:)
first_few_rows=10×6 table
Region OutageTime Loss Customers RestorationTime Cause
_________ ________________ ______ __________ ________________ _______________
SouthWest 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 winter storm
SouthEast 2003-01-23 00:49 530.14 2.1204e+05 NaT winter storm
SouthEast 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 winter storm
West 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 equipment fault
MidWest 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 severe storm
West 2003-06-18 02:49 0 0 2003-06-18 10:54 attack
West 2004-06-20 14:39 231.29 NaN 2004-06-20 19:16 equipment fault
West 2002-06-06 19:28 311.86 NaN 2002-06-07 00:51 equipment fault
NorthEast 2003-07-16 16:23 239.93 49434 2003-07-17 01:12 fire
MidWest 2004-09-27 11:09 286.72 66104 2004-09-27 16:37 equipment fault
Represente un histograma categórico de la variable Cause
. Especifique un argumento de salida para devolver identificadores al objeto del histograma.
h = histogram(C.Cause); xlabel('Cause of Outage') ylabel('Frequency') title('Most Common Power Outage Causes')
Cambie la normalización del histograma para utilizar la normalización de 'probability'
que muestra la frecuencia relativa del motivo de cada corte.
h.Normalization = 'probability'; ylabel('Relative Frequency')
Cambiar el orden de visualización
Utilice la opción 'DisplayOrder'
para clasificar los bins del mayor al menor.
h.DisplayOrder = 'descend';
Truncar el número de barras mostradas
Utilice la opción 'NumDisplayBins'
para mostrar solo tres barras en la gráfica. Las probabilidades mostradas ya no se añaden a 1, puesto que los datos que no se muestran se siguen teniendo en cuenta para la normalización.
h.NumDisplayBins = 3;
Resumir datos excluidos
Utilice la opción 'ShowOthers'
para resumir todas las barras excluidas, de manera que las probabilidades mostradas se vuelvan a añadir a 1.
h.ShowOthers = 'on';
Limitar la normalización para mostrar datos
Antes de la versión R2017a, las funciones histogram
e histcounts
solo utilizaban datos combinados para calcular las normalizaciones. Este comportamiento implicaba que, si algunos de los datos acababan fuera de los bins, se ignoraban para fines de normalización. Sin embargo, en la versión R2017a de MATLAB®, el comportamiento cambió para normalizar siempre con el número total de elementos en los datos de entrada. El nuevo comportamiento es más intuitivo, aunque, si prefiere el anterior, ha de seguir unos pasos específicos para limitar la normalización solo a los datos combinados.
En lugar de normalizar en todos los datos de entrada, puede limitar la normalización de probabilidad a los datos que se muestran en el histograma. Solo tiene que actualizar la propiedad Data
del objeto de histograma para eliminar las otras categorías. La propiedad Categories
refleja las categorías mostradas en el histograma. Utilice setdiff
para comparar los dos valores de propiedad y eliminar cualquier categoría de Data
que no se encuentre en Categories
. A continuación, elimine todos los elementos categóricos undefined
resultantes de los datos y deje solo los elementos de las categorías mostradas.
h.ShowOthers = 'off';
cats_to_remove = setdiff(categories(h.Data),h.Categories);
h.Data = removecats(h.Data,cats_to_remove);
h.Data = rmmissing(h.Data);
La normalización ahora se basa solo en las tres categorías restantes, de modo que las tres barras se añaden a 1.