web-dev-qa-db-fra.com

En utilisant seaborn, comment puis-je ajouter des lignes verticales à un diagramme de distribution (sns.distplot)

En utilisant les exemples de seaborn.pydata.org et du manuel Python DataScience , je suis en mesure de produire un tracé de distribution combinée avec l'extrait suivant:

Code:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# some settings
sns.set_style("darkgrid")

# Create some data
data = np.random.multivariate_normal([0, 0], [[5, 2], [2, 2]], size=2000)
data = pd.DataFrame(data, columns=['x', 'y'])

# Combined distributionplot
sns.distplot(data['x'])
sns.distplot(data['y'])

Parcelle: enter image description here

Comment puis-je combiner cette configuration avec des lignes verticales afin de pouvoir illustrer les seuils comme ceci:

enter image description here

Je sais que je peux le faire avec matplotlib, comme ici - Sous-graphes dynamiques d'histogramme avec ligne pour marquer la cible , mais j'aime beaucoup la simplicité des graphes créés par les marins et je voudrais savoir s'il est possible de le faire plus élégamment (Et oui, je sais que Seaborn se construit sur matplotlib).

Merci pour vos suggestions!

14
vestland

Juste utiliser

plt.axvline(2.8, 0,0.17)

Et la même chose pour l'autre ligne

Ici, au lieu de 0,17, vous pouvez mettre les maxima de votre distribution en utilisant une variable telle que maxx = max(data) ou quelque chose de similaire. 2,8 est la position sur l'axe des x. Oh, rappelez-vous que la valeur y doit être comprise entre 0 et 1, où 1 est le sommet de l'intrigue. Vous pouvez redimensionner vos valeurs en conséquence. Une autre option évidente est simplement

plt.plot([2.8, 2.8], [0, max(data)])
21
Sheldore