Mientras hacía algunos problemas de práctica con seaborn y un cuaderno Jupyter, me di cuenta de que los gráficos distplot() no tenían los contornos más oscuros en los contenedores individuales que tienen todos los gráficos de muestra en la documentación. Intenté crear los gráficos usando Pycharm y noté lo mismo. Pensando que era un problema nacido en el mar, probé algunos gráficos hist() usando matplotlib, solo para obtener los mismos resultados.
import matplotlib.pyplot as plt import seaborn as sns titanic = sns.load_dataset('titanic') plt.hist(titanic['fare'], bins=30)arrojó el siguiente gráfico:
Finalmente me topé con el parámetro 'edgecolor' en la función plt.hist(), y configurarlo en negro funcionó. Desafortunadamente, no he encontrado un parámetro similar para usar en la función distplot() de seaborn, por lo que todavía no puedo obtener un gráfico que se vea como debería.
Busqué cambiar los rcParams en matplotlib, pero no tengo experiencia con eso y el siguiente script que ejecuté parecía no hacer nada:
import matplotlib as mpl mpl.rcParams['lines.linewidth'] = 1 mpl.rcParams['lines.color'] = 'black' mpl.rcParams['patch.linewidth'] = 1 mpl.rcParams['patch.edgecolor'] = 'black' mpl.rcParams['axes.linewidth'] = 1 mpl.rcParams['axes.edgecolor'] = 'black'Solo estaba adivinando el valor que se suponía que debía cambiar, pero ejecutar mis gráficos nuevamente no mostró cambios.
Luego intenté volver a la configuración predeterminada usando mpl.rcdefaults() pero, una vez más, no hubo cambios.
Reinstalé matplotlib usando conda pero aún así los gráficos se ven iguales. Me estoy quedando sin ideas sobre cómo cambiar el color de borde predeterminado para estos gráficos. Estoy ejecutando las últimas versiones de Python, matplotlib y seaborn usando la compilación Conda.
Como parte de la actualización de matplotlib 2.0, los bordes de los gráficos de barras están desactivados de forma predeterminada . Sin embargo, puede usar el rcParam
plt.rcParams["patch.force_edgecolor"] = Truepara activar los bordes globalmente.
Probablemente, la opción más fácil es establecer específicamente el color del borde al crear una trama marina, usando el argumento hist_kws ,
ax = sns.distplot(x, hist_kws=dict(edgecolor="k", linewidth=2)) Para diagramas de matplotlib, puede usar directamente el argumento edgecolor o ec .
plt.bar(x,y, edgecolor="k") plt.hist(x, edgecolor="k")Igualmente, para las parcelas de pandas,
df.plot(kind='hist',edgecolor="k")Un ejemplo marino completo:
import numpy as np import matplotlib.pyplot as plt import seaborn as sns x = np.random.randn(100) ax = sns.distplot(x, hist_kws=dict(edgecolor="k", linewidth=2)) plt.show()A partir de marzo de 2021:
sns.histplot(data, edgecolor='k', linewidth=2) trabaja. Usando hist_kws=dict(edgecolor="k", linewidth=2) dio un error:
AttributeError: 'PolyCollection' object has no property 'hist_kws'
Usar los estilos disponibles en seaborn también podría resolver su problema. Los estilos disponibles en seaborn son: