web-dev-qa-db-fra.com

Pas de lignes sur les bacs d'histogrammes Matplotlib ou de distbots Seaborn

En faisant quelques problèmes pratiques avec Seaborn et un cahier Jupyter, je me suis rendu compte que les graphiques distplot () ne présentaient pas les contours plus sombres des groupes individuels de tous les exemples de graphiques de la documentation. J'ai essayé de créer les graphiques en utilisant Pycharm et j'ai remarqué la même chose. Pensant que c'était un problème marin, j'ai essayé quelques graphiques hist () en utilisant matplotlib, pour obtenir les mêmes résultats.

import matplotlib.pyplot as plt
import seaborn as sns
titanic = sns.load_dataset('titanic')
plt.hist(titanic['fare'], bins=30)

a donné le graphique suivant:

enter image description here

Enfin, je suis tombé sur le paramètre 'edgecolor' de la fonction plt.hist (), et le définir en noir a fait l'affaire. Malheureusement, je n'ai pas trouvé de paramètre similaire à utiliser sur la fonction seaborn distplot (), je ne parviens donc toujours pas à obtenir un graphique comme il se doit.

J'ai envisagé de changer les rcParams dans matplotlib, mais je n'ai aucune expérience dans ce domaine et le script suivant que j'ai exécuté semblait ne rien faire:

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'

Je devinais en quelque sorte la valeur que je devais changer, mais le fait de réexécuter mes graphiques ne montrait aucun changement.

J'ai ensuite essayé de revenir aux paramètres par défaut en utilisant mpl.rcdefaults () mais, encore une fois, aucun changement.

J'ai réinstallé matplotlib en utilisant conda mais les graphiques ont toujours le même aspect. Je suis à court d'idées sur la façon de changer la couleur Edge par défaut pour ces graphiques. J'utilise les dernières versions de Python, matplotlib et seaborn à l'aide de la version Conda.

28
Colin Lindley

Dans le cadre de la mise à jour de matplotlib 2.0, les arêtes des graphiques à barres sont désactivées par défaut . Cependant, vous pouvez utiliser le rcParam

plt.rcParams["patch.force_edgecolor"] = True

tourner les bords globalement.

L’option la plus simple est probablement de définir spécifiquement le edgecolor lors de la création d’un tracé marin, à l’aide de la commande hist_kws argument,

ax = sns.distplot(x, hist_kws=dict(edgecolor="k", linewidth=2))

Pour les graphiques matplotlib, vous pouvez directement utiliser l'argument edgecolor ou ec.

plt.bar(x,y, edgecolor="k")
plt.hist(x, edgecolor="k")

De même, pour les pandas parcelles,

df.plot(kind='hist',edgecolor="k")

Un exemple complet né de la mer:

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

enter image description here

49