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 instancias desalentadas de hist y histc

Funciones de histograma antiguas (hist, histc)

Las versiones anteriores de MATLAB® utilizan las funciones hist y histc como la forma principal de crear histogramas y calcular los conteos de bin histograma. Estas funciones, aunque buenas para algunos propósitos generales, tienen capacidades totales limitadas. El uso de hist y histc en código nuevo se desalienta por estas razones (entre otros):

  • Después de usar hist para crear un histograma, modificar las propiedades del histograma es difícil y requiere recalcular todo el histograma.

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

  • Trazar un histograma normalizado requiere cálculos manuales.

  • hist y histc no tienen un comportamiento consistente.

Funciones de histograma recomendadas

Las funciones histogram, histcounts y discretize avanzan dramáticamente las capacidades de creación y cálculo de histogramas en MATLAB, a la vez que promueven la consistencia y la facilidad de uso. histogram, histcountsy discretize son las funciones recomendadas de creación y cálculo de histogramas para el nuevo código.

De la nota particular son los cambios siguientes, que están parados como Mejoras encima hist y histc:

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

  • Tanto histogram como histcounts tienen capacidades automáticas de binning y normalización, con varias opciones comunes incorporadas.

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

  • discretize ofrece opciones y flexibilidad adicionales para determinar la ubicación de cada elemento en el contenedor.

Diferencias que requieren actualizaciones de código

A pesar de las mejoras mencionadas anteriormente, hay varias Diferencias importantes entre las funciones antiguas y ahora recomendadas, que podrían requerir la actualización de su código. Las tablas resumen las diferencias entre las funciones y proporcionan sugerencias para actualizar código.

Actualizaciones de código para hist

DiferenciaViejo comportamiento con histNuevo comportamiento con histogram

Matrices de entrada

hist crea un histograma para cada columna de una matriz de entrada y traza los histogramas de lado a lado en la misma figura.

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

histogram trata la matriz de entrada como un solo vector alto y crea un solo histograma. Para trazar varios histogramas, cree un objeto de histograma diferente para cada columna de datos. Utilice el comando hold on para trazar 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 bordes de bin para cada histograma, pero en algunos casos es mejor establecer el BinWidth de cada histograma para que sea el mismo en su lugar. Además, para los propósitos de visualización, puede ser útil establecer la propiedad FaceAlpha de cada histograma, ya que esto afecta a la transparencia de las barras solapadas.

Especificación de bin

hist acepta el bin Centros como una segunda entrada.

histogram acepta el bin Bordes como una segunda entrada.

Para convertir los centros bin en bordes bin para utilizarlos con histogram, consulte Convertir centros bin a bordes bin.

Nota

En los casos en los que los centros de bin utilizados con hist son enteros, como hist(A,-3:3), utilice el nuevo método incorporado binning de histogram para números enteros.

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

Argumentos de salida

hist devuelve los conteos de bin como un argumento de salida y, opcionalmente, puede devolver los centros bin como un segundo argumento de salida.

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

histogram devuelve un objeto histograma como argumento de salida. El objeto contiene muchas propiedades de interés (recuentos de bin, bordes de bin, etc.). Puede modificar los aspectos del histograma cambiando sus valores de propiedad. 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 conteos de bin (sin trazar un histograma), reemplace [N, Centers] = hist(A) con [N,edges] = histcounts(A,nbins).

Número predeterminado de bins

hist utiliza 10 bins por defecto.

Tanto histogram como histcounts utilizan un algoritmo binning automático de forma predeterminada. El número de bins está determinado por el tamaño y la propagación de los datos de entrada.

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

Límites de bin

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

Si no se establece BinLimits , entonces histogram utiliza límites de bin racionales basados en, pero no exactamente iguales, los valores mínimos y máximos de datos finitos. histogram omite los valores de Inf a menos que uno de los bordes del bin especifique explícitamente Inf o -Inf como borde bin.

Para reproducir los resultados de hist(A) para datos finitos (sin valores Inf ), utilice 10 bins y establezca explícitamente BinLimits en los valores mínimos y máximos de datos.

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

Actualizaciones de código para histc

DiferenciaViejo comportamiento con histcNuevo comportamiento con histcounts
Matrices de entrada

histc calcula los conteos de bin para cada columna de datos de entrada. Para una matriz de entrada de tamaño m-byn-, histc devuelve una matriz de conteos de bin de tamaño length(edges)-by-n.

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

histcounts trata la matriz de entrada como un solo vector alto y calcula los conteos de bin para toda la matriz.

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

Utilice un bucle for para calcular los conteos de bin sobre 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 a un gran número de columnas de la matriz, considere seguir utilizando histc para los conteos de bin de columna.

Valores incluidos en el último bin

histc incluye un elemento A(i) en el último bin si A(i) == edges(end). La salida, N, es un vector con elementos length(edges) que contienen los conteos de bin. Los valores que caen fuera de los contenedores no se contabilizan.

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. La salida, N, es un vector con elementos length(edges)-1 que contienen los conteos de bin. Si especifica los bordes del contenedor, los valores que caen fuera de los contenedores no se contabilizan. De lo contrario, histcounts determina automáticamente los bordes de bin apropiados que se usarán 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 principalmente útil para contar enteros. Para hacer este conteo entero con histcounts, utilice el método bin 'integers' :

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

histc devuelve los conteos de bin como un argumento de salida y, opcionalmente, puede devolver los índices bin como un segundo argumento de salida.

A = randn(15,1); edges = -4:4; [N,Bin] = histc(A,edges)
  • Para cálculos de conteo de bin como N = histc(A,edges) o [N,bin] = histc(A,edges), use histcounts. La función histcounts devuelve los conteos de bin como un argumento de salida y, opcionalmente, puede devolver los bordes del bin como una segunda salida, o los índices bin como una tercera salida.

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

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

Convertir centros bin a bordes bin

La función hist acepta los centros bin, mientras que la función histogram acepta los bordes bin. Para actualizar el código para utilizar histogram, es posible que tenga que convertir los centros bin a bordes bin para reproducir los resultados obtenidos con hist.

Por ejemplo, especifique los centros de bin para utilizarlos con hist. Estos contenedores 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 bin en bordes bin, calcule el punto medio entre los valores consecutivos en centers. Este método reproduce los resultados de hist para 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 valores que caen en el borde derecho de cada bin (la primera bandeja incluye ambos bordes), mientras que histogram incluye valores que caen en el borde izquierdo de cada bin (y el último bin incluye ambos bordes). Desplazar ligeramente los bordes del contenedor para obtener el mismo conteo 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

Ahora, use histogram con los bordes de la bandeja.

histogram(A,edges)