Durante el año pasado, me enfrenté a la necesidad de dibujar histogramas y gráficos de barras con la frecuencia suficiente para hacerme querer y poder escribir al respecto. Además, yo mismo carecía de tal información. Este artículo proporciona una descripción general de 3 métodos para crear tales gráficos en Python.
Para empezar, yo mismo no lo supe durante mucho tiempo debido a mi inexperiencia: los gráficos de barras y los histogramas son dos cosas diferentes. La principal diferencia es que el histograma muestra la distribución de frecuencia: especificamos un conjunto de valores para el eje Ox, y la frecuencia siempre se representa en Oy. En el gráfico de barras (que sería apropiado llamar gráfico de barras en la literatura inglesa) especificamos tanto el eje de abscisas como el eje de ordenadas.
Para la demostración, utilizaré el conjunto de datos de la biblioteca Iris de batido scikit learn. Comencemos con las importaciones:
import pandas as pd import numpy as np import matplotlib import matplotlib.pyplot as plt from sklearn import datasets iris = datasets.load_iris()
Transformaremos el conjunto de datos del iris en un marco de datos, por lo que será más conveniente para nosotros trabajar con él en el futuro.
data = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target'])
De los parámetros que nos interesan, los datos contienen información sobre la longitud de los sépalos y pétalos y el ancho de los sépalos y pétalos.
Usando MatplotlibHistogramaConstruyamos un histograma regular que muestre la distribución de frecuencia de las longitudes de los pétalos y sépalos:
fig, axs = plt.subplots(1, 2) n_bins = len(data) axs[0].hist(data['sepal length (cm)'], bins=n_bins) axs[0].set_title('sepal length') axs[1].hist(data['petal length (cm)'], bins=n_bins) axs[1].set_title('petal length')
Construyendo un gráfico de barrasUsamos métodos matplotlib para comparar el ancho de hojas y sépalos. Esto parece más conveniente de hacer en un solo gráfico:
x = np.arange(len(data[:50])) width = 0.35
Por ejemplo, y para simplificar la imagen, tome las primeras 50 líneas del marco de datos.
fig, ax = plt.subplots(figsize=(40,5)) rects1 = ax.bar(x - width/2, data['sepal width (cm)'][:50], width, label='sepal width') rects2 = ax.bar(x + width/2, data['petal width (cm)'][:50], width, label='petal width') ax.set_ylabel('cm') ax.set_xticks(x) ax.legend()
Usar métodos nacidos en el marEn mi opinión, muchas tareas para construir histogramas son más fáciles y más eficientes de realizar utilizando métodos nacidos
en el mar
(en mi opinión, seaborn también gana con sus capacidades gráficas) .
Daré un ejemplo de tareas resueltas en seaborn con una sola línea de código. Especialmente seaborn es ganador cuando necesitas construir una distribución. Digamos que necesitamos construir una distribución de longitud de sépalos. La solución a este problema es la siguiente:
sns_plot = sns.distplot(data['sepal width (cm)']) fig = sns_plot.get_figure()

Si solo necesita un cronograma de distribución, puede hacerlo así:
snsplot = sns.kdeplot(data['sepal width (cm)'], shade=True) fig = snsplot.get_figure()

Lea más sobre la construcción de distribuciones en seaborn
aquí.Pandas Bar ChartsTodo es simple aquí. Este es en realidad el caparazón de matplotlib.pyplot.hist (), pero llamar a una función a través de pd.hist () a veces es más conveniente que las construcciones menos ágiles de matplotlib-a.
Puedes leer más en la documentación de la biblioteca de pandas.Funciona así:
h = data['petal width (cm)'].hist() fig = h.get_figure()

¡Gracias por leer hasta el final! Estaré encantado de comentarios y comentarios!