Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Reemplazar las instancias no recomendadas de hist e histc

Funciones de histograma anteriores (hist, histc)

Las versiones anteriores de MATLAB® utilizan las funciones hist e histc como el método principal para crear histogramas y calcular los recuentos de bin del histograma. Estas funciones, aunque son adecuadas para algunos fines generales, cuentan con capacidades generales limitadas. No se recomienda el uso de hist e histc en nuevo código por estos motivos (entre otros):

  • Tras utilizar hist para crear un histograma, modificar las propiedades del histograma resulta complicado y requiere volver a calcular todo el histograma.

  • El comportamiento predeterminado de hist es utilizar 10 bins, lo que no es indicado para muchos conjuntos de datos.

  • La representación de un histograma normalizado requiere de cálculos manuales.

  • hist e histc no tienen un comportamiento coherente.

Funciones de histograma recomendadas

Las funciones histogram, histcounts y discretize desarrollan drásticamente las capacidades de creación y cálculo de histogramas en MATLAB, a la vez que se sigue fomentando la coherencia y la facilidad de uso. histogram, histcounts y discretize son las funciones recomendadas para la creación y el cálculo de histogramas para nuevo código.

Hay que destacar los siguientes cambios, que se presentan como mejoras de hist e histc:

  • histogram puede devolver un objeto de histograma. Se puede utilizar el objeto para modificar las propiedades del histograma.

  • histogram e histcounts cuentan con capacidades de combinación y normalización automáticas, con varias opciones frecuentes integradas.

  • histcounts es la función de cálculo principal para histogram. El resultado es que las funciones presentan un comportamiento coherente.

  • discretize ofrece flexibilidad y opciones adicionales para determinar la colocación del bin de cada elemento.

Diferencias que requieren actualizaciones de código

A pesar de las mejoras mencionadas anteriormente, existen varias diferencias importantes entre las funciones anteriores y las que ahora se recomiendan, que podrían requerir de la actualización del código. La tabla resume las diferencias entre las funciones y ofrece sugerencias para actualizar el código.

Actualizaciones de código para hist

DiferenciaAntiguo comportamiento con histNuevo comportamiento con histogram

Matrices de entrada

hist crea un histograma para cada columna de una matriz de entrada y representa los histogramas uno al lado del otro en la misma figura.

A = randn(100,2);
hist(A)

histogram trata la matriz de entrada como un vector único alto y crea un único histograma. Para representar varios histogramas, cree otro objeto de histograma para cada columna de datos. Utilice el comando hold on para representar los histogramas en la misma figura.

A = randn(100,2);
h1 = histogram(A(:,1),10)
edges = h1.BinEdges;
hold on
h2 = histogram(A(:,2),edges)

El ejemplo de código anterior utiliza los mismos extremos del bin, pero en determinados casos es mejor definir que la propiedad BinWidth de cada histograma sea la misma en su lugar. Además, para fines de visualización, podría resultar útil definir la propiedad FaceAlpha de cada histograma, pues afecta a la transparencia de las barras que se solapan.

Especificación de bin

hist acepta los centros de bin como segunda entrada.

histogram acepta los extremos de bin como segunda entrada.

Para convertir los centros de bin en extremos para su uso con histogram, consulte Convertir centros de bin en extremos de bin.

Nota

En los casos en que los centros de bin que se utilizan con hist sean números enteros, como hist(A,-3:3), utilice el nuevo método de discretización integrado de histogram para números enteros.

histogram(A,'BinLimits',[-3,3],'BinMethod','integers')

Argumentos de salida

hist devuelve los recuentos de bin como un argumento de salida y, de manera opcional, puede devolver los centros de bin como un segundo argumento de salida.

A = randn(100,1);
[N, Centers] = hist(A)

histogram devuelve un objeto de histograma como un argumento de salida. El objeto contiene muchas propiedades de interés (recuentos de bin, extremos del intervalo y otras). Puede modificar los aspectos del histograma cambiando sus valores de propiedades. Para obtener más información, consulte histogram.

A = randn(100,1);
h = histogram(A);
N = h.Values
Edges = h.BinEdges

Nota

Para calcular los recuentos de bin (sin representar un histograma), sustituya [N, Centers] = hist(A) por [N,edges] = histcounts(A,nbins).

Número predeterminado de bins

hist utiliza 10 bins de manera predeterminada.

histogram y histcounts utilizan un algoritmo de discretización automático de manera predeterminada. El número de bins se determina mediante el tamaño y la extensión de los datos de entrada.

A = randn(100,1);
histogram(A)
histcounts(A)

Límites de bin

hist utiliza los valores de datos finitos mínimos y máximos para determinar los extremos izquierdo y derecho de la primera y última barra en la gráfica. -Inf y Inf se incluyen en el primer y último bin, respectivamente.

Si no se ha configurado BinLimits, histogram utiliza los límites de bin racionales basados en, pero no exactamente igual a, los valores de datos finitos mínimos y máximos. histogram ignora los valores de Inf, a menos que uno de los extremos del bin especifique de manera explícita Inf o -Inf como un extremo de bin.

Para reproducir los resultados de hist(A) para datos finitos (ningún valor de Inf), utilice 10 bins y configure de manera explícita BinLimits con los valores de datos mínimos y máximos.

A = randi(5,100,1);
histogram(A,10,'BinLimits',[min(A) max(A)])

Actualizaciones de código para histc

DiferenciaAntiguo comportamiento con histcNuevo comportamiento con histcounts
Matrices de entrada

histc calcula el recuento de bin para cada columna de los datos de entrada. Para una matriz de entrada de tamaño m por n, histc devuelve una matriz de recuentos de bin de tamaño length(edges) por n.

A = randn(100,10);
edges = -4:4;
N = histc(A,edges)

histcounts trata la matriz de entrada como un vector único alto y calcula los recuentos de bin para toda la matriz.

A = randn(100,10);
edges = -4:4;
N = histcounts(A,edges)

Utilice un bucle for para calcular recuentos de bin en cada columna.

A = randn(100,10);
nbins = 10;
N = zeros(nbins, size(A,2));
for k = 1:size(A,2)
   N(:,k) = histcounts(A(:,k),nbins);
end

Si el rendimiento es un problema debido al gran número de columnas en la matriz, considere seguir utilizando histc para los recuentos de bin relacionados con la columna.

Valores incluidos en el último bin

histc incluye un elemento A(i) en el último bin si A(i) == edges(end). El resultado, N, es un vector con elementos de length(edges) que contiene los recuentos de bin. No se cuentan los valores que no están dentro de los bins.

histcounts incluye un elemento A(i) en el último bin si edges(end-1) <= A(i) <= edges(end). En otras palabras, histcounts combina los dos últimos bins de histc en un único bin final. El resultado, N, es un vector con elementos de length(edges)-1 que contiene los recuentos de bin. Si especifica los extremos del bin, no se cuentan los valores que no están dentro de los bins. De otra manera, histcounts determina de manera automática los límites de bin adecuados que utilizar para incluir todos los datos.

A = 1:4;
edges = [1 2 2.5 3]
N = histcounts(A)
N = histcounts(A,edges)

El último bin de histc es útil sobre todo para contar números enteros. Para realizar este recuento de números enteros con histcounts, utilice el método de bin 'integers':

N = histcounts(A,'BinMethod','integers'); 
Argumentos de salida

histc devuelve los recuentos de bin como un argumento de salida y, de manera opcional, puede devolver los índices de bin como un segundo argumento de salida.

A = randn(15,1);
edges = -4:4;
[N,Bin] = histc(A,edges)
  • Para cálculos de recuento de bin como N = histc(A,edges) o [N,bin] = histc(A,edges), utilice histcounts. La función histcounts devuelve los recuentos de bin como un argumento de salida y, de manera opcional, puede devolver los límites de bin como un segundo resultado o los índices de bin como un tercer resultado.

    A = randn(15,1);
    [N,Edges,Bin] = histcounts(A)
  • Para cálculos de colocación del bin como [~,Bin] = histc(A,edges), utilice discretize. La función discretize ofrece más opciones para determinar la colocación del bin de cada elemento.

    A = randn(15,1);
    edges = -4:4;
    Bin = discretize(A,edges)

Convertir centros de bin en extremos de bin

La función hist acepta los centros de bin, mientras que la función histogram acepta los extremos de bin. Si desea actualizar el código para utilizar histogram, puede que tenga que convertir los centros de bin en extremos de bin para reproducir los resultados logrados con hist.

Por ejemplo, especifique centros de bin para su uso con hist. Estos bins tienen un ancho uniforme.

A = [-9 -6 -5 -2 0 1 3 3 4 7];
centers = [-7.5 -2.5 2.5 7.5];
hist(A,centers)

Para convertir los centros de bin en extremos de bin, calcule el punto intermedio entre los valores consecutivos en centers. Este método reproduce los resultados de hist para los anchos de bin uniformes y no uniformes.

d = diff(centers)/2;
edges = [centers(1)-d(1), centers(1:end-1)+d, centers(end)+d(end)];

La función hist incluye los valores que se encuentran en el extremo derecho de cada bin (el primer bin incluye los dos extremos), mientras que histogram incluye los valores que se encuentran en el extremo izquierdo de cada bin (y el último bin incluye los dos extremos). Cambie los extremos de bin mínimamente para obtener los mismos recuentos de bin que hist.

edges(2:end) = edges(2:end)+eps(edges(2:end))
edges = 1×5

  -10.0000   -5.0000    0.0000    5.0000   10.0000

Luego, utilice histogram con los extremos del bin.

histogram(A,edges)