una matriz libreria histogramas histograma hacer hace datos como arreglo python matplotlib histogram

matriz - libreria matplotlib python



Trazar un histograma a partir de datos precontados en Matplotlib (4)

Puede usar el argumento de la palabra clave de weights para np.histgram (que plt.hist llama debajo)

val, weight = zip(*[(k, v) for k,v in counted_data.items()]) plt.hist(val, weights=weight)

Suponiendo que solo tenga enteros como teclas, también puede usar la bar directamente:

min_bin = np.min(counted_data.keys()) max_bin = np.max(counted_data.keys()) bins = np.arange(min_bin, max_bin + 1) vals = np.zeros(max_bin - min_bin + 1) for k,v in counted_data.items(): vals[k - min_bin] = v plt.bar(bins, vals, ...)

donde ... es lo que alguna vez los argumentos que desea pasar a la bar (doc)

Si desea volver a agrupar sus datos, consulte el Histograma con una lista separada que indica la frecuencia

Me gustaría usar Matplotlib para trazar un histograma sobre los datos que se han contado previamente. Por ejemplo, digamos que tengo los datos en bruto.

data = [1, 2, 2, 3, 4, 5, 5, 5, 5, 6, 10]

Dados estos datos, puedo usar

pylab.hist(data, bins=[...])

para trazar un histograma.

En mi caso, los datos se han contabilizado previamente y se representan como un diccionario:

counted_data = {1: 1, 2: 2, 3: 1, 4: 1, 5: 4, 6: 1, 10: 1}

Idealmente, me gustaría pasar estos datos pre-contados a una función de histograma que me permite controlar los anchos de los contenedores, el rango de la parcela, etc., como si hubiera pasado los datos en bruto. Como solución alternativa, estoy expandiendo mis conteos a los datos en bruto:

data = list(chain.from_iterable(repeat(value, count) for (value, count) in counted_data.iteritems()))

Esto es ineficiente cuando counted_data contiene recuentos para millones de puntos de datos.

¿Existe una forma más fácil de usar Matplotlib para producir un histograma a partir de mis datos precontados?

De manera alternativa, si es más fácil simplemente los datos de trazado de barras que han sido pre-binados, ¿hay un método conveniente para "enrollar" mis conteos por artículo en conteos en contenedores?


También puede utilizar el mar para trazar el histograma:

import matplotlib.pyplot as plt import seaborn as sns sns.distplot(list(counted_data.keys()), hist_kws={"weights":list(counted_data.values())})


la longitud de la matriz de "bandejas" debe ser más larga que la longitud de "cuentas". Aquí está la manera de reconstruir completamente el histograma:

import numpy as np import matplotlib.pyplot as plt bins = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]).astype(float) counts = np.array([5, 3, 4, 5, 6, 1, 3, 7]).astype(float) centroids = (bins[1:] + bins[:-1]) / 2 counts_, bins_, _ = plt.hist(centroids, bins=len(counts), weights=counts, range=(min(bins), max(bins))) plt.show() assert np.allclose(bins_, bins) assert np.allclose(counts_, counts)


pyplot.hist la opción de weights pyplot.hist para ponderar cada clave por su valor, produciendo el histograma que quería:

pylab.hist(counted_data.keys(), weights=counted_data.values(), bins=range(50))

Esto me permite confiar en el hist para volver a agrupar mis datos.