import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.colors
= sns.load_dataset(
diamonds "diamonds", cache=True, data_home=None
5000)
).sample(
# You can uncomment this line to change the style of the graphs.
# plt.style.use('ggplot')
Data-vis
Introducción a matplotlib
Matplotlib
Matplotlib es una herramienta versátil y robusta para crear gráficos de alta calidad y personalizables. Aunque es una biblioteca de Python, también se puede usar en otros entornos como Jupyter Notebook. Es compatible con paquetes comunes de análisis de datos como Pandas y NumPy, y sirve como base para paquetes más avanzados utilizados para visualización y análisis, como Seaborn, HoloViews, Basemap, GeoPandas y Canopy.
Cuando se usa Matplotlib localmente, se recomienda instalarlo a través de un gestor de paquetes de Python, como el conocido “pip”. Puedes hacer esto ejecutando el comando “pip install matplotlib” en tu terminal o símbolo del sistema, como se muestra en la imagen. Si estás trabajando en un entorno basado en la nube, también necesitarás instalar los paquetes necesarios según se muestra.
Primeros pasos
Matplotlib es una biblioteca utilizada para crear visualizaciones y gráficos en Python. Después de instalar la biblioteca, necesitas importarla a tu entorno de trabajo. Es importante entender que Matplotlib trabaja con dos componentes principales o “zonas de interacción”:
Figura: Este es el contenedor de nivel superior que engloba todos los elementos, actuando esencialmente como la “ventana” que contiene el gráfico. Puedes encontrar más detalles en el módulo matplotlib.figure.
Ejes: Los ejes contienen los elementos de la figura y te permiten controlar aspectos como la representación gráfica, los ejes, la apariencia y más. Puedes encontrar información detallada sobre los ejes en el módulo matplotlib.axes.
Matplotlib proporciona tres formas de usar la biblioteca:
Usando el módulo pylab: Importando la biblioteca con el comando from pylab import *, obtienes un estilo similar a MATLAB. Este enfoque es adecuado para pruebas rápidas e interacciones en línea de comandos, aunque generalmente se recomienda menos para un uso general.
Usando el módulo pyplot: Esta es una interfaz basada en estado para Matplotlib, también similar a MATLAB. Automatiza la creación de las instancias necesarias para dibujar el gráfico y se recomienda tanto para gráficos interactivos como estáticos. Puedes encontrar más información y una lista de funciones en el módulo matplotlib.pyplot.
Usando una interfaz orientada a objetos: Este es el método más complejo pero ofrece más control. Permite la generación de gráficos avanzados porque tienes un mayor control sobre el código para crear instancias y aplicar métodos a ellas. Este enfoque es ampliamente recomendado para la generación de gráficos no interactivos y se puede integrar fácilmente en funciones y scripts dentro de proyectos más grandes.
Usando una interfaz orientada a objetos: Este es el método más complejo pero ofrece más control. Permite la generación de gráficos avanzados porque tienes mayor control sobre el código para crear instancias y aplicar métodos a ellas. Este enfoque es ampliamente recomendado para la generación de gráficos no interactivos y puede integrarse fácilmente en funciones y scripts dentro de proyectos más grandes.
Further reading
Visit the The Python Graph Gallery for inspiration.
Visit the matplotlib documentation, there are learning sources for begginers and advanced users.
Read the complete guide of Kaggle. It can be helpful.
Download the Datacamp matplotlib cheat sheet
Conceptos básicos
Plot
= diamonds["carat"]
x = diamonds["price"]/1000
y = diamonds["cut"] z
= 'b', marker = ".", linestyle = "none")
plt.plot(x, y, color
plt.show() plt.close()
'b.')
plt.plot(x, y,
plt.show() plt.close()
'rx')
plt.plot(x, y,
plt.show() plt.close()
'go')
plt.plot(x, y, 'go')
plt.plot(y, x,
plt.show() plt.close()
Histogram
plt.hist(x)
plt.show() plt.close()
Scatterplot
plt.scatter(x, y)
plt.show() plt.close()
Pie
= z.value_counts()
z_count
= plt.pie(z_count, labels=z_count.index)
plot_01
plt.show() plt.close()
= plt.pie(z_count)
plot_01 'b.')
plt.plot(x, y,
plt.show() plt.close()
Barplot
plt.bar(z_count.index, z_count)
plt.show() plt.close()
Boxplot
= plt.boxplot(x)
plot_01
plt.show() plt.close()
Subplot
# subplot
# # de filas
# # de columnas
# índice
1, 2, 1)
plt.subplot('r.')
plt.plot(x, y, 1, 2, 2)
plt.subplot(
plt.hist(y)
plt.show() plt.close()
Uso orientado a objetos
= plt.figure()
fig = fig.add_axes([0.1, 0.1, 0.8, 0.8])
axes "b.")
axes.plot(x, y,
plt.show() plt.close()
= plt.figure()
fig = fig.add_axes([0.1, 0.1, 0.4, 0.5])
axes "gv")
axes.plot(x, y,
plt.show() plt.close()
= plt.figure()
fig = fig.add_axes([0.1, 0.1, .65, 0.65])
axes1
axes1.scatter(x, y)= fig.add_axes([0.8, 0.1, 0.15, 0.65])
axes2
axes2.boxplot(x)= fig.add_axes([0.1, 0.8, 0.65, 0.15])
axes3 =False)
axes3.boxplot(y, vert
plt.show() plt.close()
= diamonds.groupby("cut")
cut_groups
= plt.figure()
fig = fig.add_axes([0.1, 0.1, .8, 0.8])
axes
for group_name, group_df in cut_groups:
"carat"], group_df["price"], label = group_name, linestyle = "", marker = ".")
axes.scatter(group_df[
plt.legend()
plt.show() plt.close()
Subplots no es subplot
= plt.subplots(nrows = 1, ncols=2)
fig, axes 0].plot(x, y, 'b.')
axes[1].plot(x, y, 'ro')
axes[
plt.show() plt.close()
= {'Fair':'blue', 'Good':'orange', 'Very Good':'green', 'Premium':'red', 'Ideal':'purple'}
colors
= plt.subplots()
fig, ax = diamonds.groupby('cut')
grouped for key, group in grouped:
=ax, kind='scatter', x='carat', y='price', label=key, color=colors[key])
group.plot(ax
plt.legend()
plt.show() plt.close()
= plt.subplots(nrows = 1, ncols=2, sharey = True)
fig, [ax1, ax2] 'b.')
ax1.plot(x, y, 'ro')
ax2.plot(x, y,
plt.show() plt.close()
= np.linspace(0, 5, 11)
x0 = np.sin(x0), np.cos(x0), np.tan(x0), x0, x0**2, x0**3
y1, y2, y3, y4, y5, y6
= plt.subplots(nrows = 2, ncols=3)
fig, [[ax1, ax2, ax3], [ax4, ax5, ax6]]
ax1.plot(x0, y1)'ro')
ax2.plot(x0, y2, 'gD')
ax3.plot(x0, y3,
ax4.plot(x0, y4)'ro')
ax5.plot(x0, y5, 'gD')
ax6.plot(x0, y6,
fig.tight_layout()
plt.show() plt.close()
Información de la figura
= plt.figure()
fig = fig.add_axes([0.1, 0.1, .65, 0.65])
axes1
axes1.scatter(x, y)= fig.add_axes([0.8, 0.1, 0.15, 0.65])
axes2
axes2.boxplot(x)= fig.add_axes([0.1, 0.8, 0.65, 0.15])
axes3 =False)
axes3.boxplot(y, vert"Carat")
axes1.set_xlabel("Price")
axes1.set_ylabel(
axes2.set_xticks([])
axes2.set_yticks([])
axes3.set_xticks([])
axes3.set_yticks([])
plt.show() plt.close()
= plt.subplots(nrows = 2, ncols=1)
fig, [ax1, ax2] 'g', label="sen(x)")
ax1.plot(x0, y1, "Seno")
ax1.set_title("x")
ax1.set_xlabel(
ax1.axhline()
ax1.legend()'r', label="$cos(x)$")
ax2.plot(x0, y2,
ax2.axhline()"Coseno")
ax2.set_title("x")
ax2.set_xlabel(
ax2.legend()
fig.tight_layout()20)
fig.set_figwidth(
plt.show() plt.close()
2, 1, 1)
plt.subplot('g', label="sen(x)")
plt.plot(x0, y1, "Seno")
plt.title("x")
plt.xlabel(
plt.axhline()
plt.legend()# plt.legend(bbox_to_anchor = (1.3, 0.5))
2, 1, 2)
plt.subplot('r', label="$cos(x)$")
plt.plot(x0, y2,
plt.axhline()"Coseno")
plt.title("x")
plt.xlabel(
plt.legend()
plt.tight_layout()
plt.show() plt.close()
Decoración
print(plt.style.available)
['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-v0_8', 'seaborn-v0_8-bright', 'seaborn-v0_8-colorblind', 'seaborn-v0_8-dark', 'seaborn-v0_8-dark-palette', 'seaborn-v0_8-darkgrid', 'seaborn-v0_8-deep', 'seaborn-v0_8-muted', 'seaborn-v0_8-notebook', 'seaborn-v0_8-paper', 'seaborn-v0_8-pastel', 'seaborn-v0_8-poster', 'seaborn-v0_8-talk', 'seaborn-v0_8-ticks', 'seaborn-v0_8-white', 'seaborn-v0_8-whitegrid', 'tableau-colorblind10']
"ggplot")
plt.style.use(
= plt.subplots(nrows = 2, ncols=1)
fig, [ax1, ax2] # ax1.plot(x, y1, color="#ff00ff", alpha = 0.1, linewidth = 10)
="sen(x)", color="#ff00ff", alpha = 1, linewidth = 1, marker = "p")
ax1.scatter(x0, y1, label"Seno")
ax1.set_title("x")
ax1.set_xlabel(= "#9999aa")
ax1.axhline(color
ax1.legend()="$cos(x)$", color="#ff0000")
ax2.plot(x0, y2, label= "#9999aa")
ax2.axhline(color"Coseno")
ax2.set_title("x")
ax2.set_xlabel(
ax2.legend()
fig.tight_layout()20)
fig.set_figwidth(
plt.show() plt.close()
Ejercicio
Genera las siguientes gráficas.