El uso de Seaborn para visualización es muy poderoso, pero requiere aplicar criterios claros para que los gráficos realmente comuniquen lo que queremos. En esta sección repasamos buenas prácticas, errores comunes y cómo combinar Seaborn con Matplotlib para lograr resultados profesionales.
Un paso clave en cualquier análisis es seleccionar el gráfico que mejor represente la relación que queremos mostrar:
hue
, style
, size
para codificar variables adicionales en un solo gráfico.pairplot
para ver todas las relaciones numéricas.FacetGrid/relplot/catplot
para separar por categorías (columnas y filas).Regla práctica: pensá primero qué pregunta querés responder con el gráfico. El tipo de variable (numérica/categórica) te guiará hacia la visualización adecuada.
order=...
en barplot, boxplot) para dar más claridad.Seaborn simplifica los gráficos, pero Matplotlib ofrece control fino sobre:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid")
tips = sns.load_dataset("tips")
ax = sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", style="sex", s=70)
# Ajustes con Matplotlib
ax.set_title("Relación entre total_bill y tip", fontsize=14, weight="bold", pad=10)
ax.set_xlabel("Total de la cuenta (USD)", fontsize=12)
ax.set_ylabel("Propina (USD)", fontsize=12)
ax.legend(title="Momento del día", loc="upper left", frameon=True)
plt.tight_layout()
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="ticks")
iris = sns.load_dataset("iris")
ax = sns.scatterplot(data=iris, x="sepal_length", y="petal_length", hue="species", s=70)
# Agregar anotación Matplotlib
ax.annotate("Versicolor típico", xy=(6, 4.5), xytext=(7, 5.5),
arrowprops=dict(arrowstyle="->", color="black"),
fontsize=10, color="darkred")
plt.title("Relación sepal_length vs petal_length con anotación")
plt.show()
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid")
titanic = sns.load_dataset("titanic")
ax = sns.barplot(data=titanic, x="class", y="survived", hue="sex", errorbar=None)
plt.title("Supervivencia por clase y sexo", fontsize=14)
plt.xlabel("Clase del pasajero")
plt.ylabel("Proporción de supervivientes")
plt.tight_layout()
# Guardar en alta resolución
plt.savefig("titanic_supervivencia.png", dpi=300)
plt.show()