Formas de crear gráficos de barras con Python

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 Matplotlib
Histograma
Construyamos 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') 

imagen

Construyendo un gráfico de barras

Usamos 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() 

imagen

Usar métodos nacidos en el mar

En 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() 

imagen

Si solo necesita un cronograma de distribución, puede hacerlo así:

 snsplot = sns.kdeplot(data['sepal width (cm)'], shade=True) fig = snsplot.get_figure() 

imagen

Lea más sobre la construcción de distribuciones en seaborn aquí.

Pandas Bar Charts

Todo 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() 

imagen

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

Source: https://habr.com/ru/post/470535/


All Articles