web-dev-qa-db-fra.com

Tracez une ligne horizontale à une position spécifique / annotez une facette en mer

A ont produit un boxplot avec Facetgrid dans seaborn de la manière suivante

# Import the dataset
tips = sns.load_dataset("tips")

# Plot using Facegrid, separated by smoke
plt.style.use('ggplot')
g = sns.FacetGrid(tips, col="smoker", size=5, aspect=1.5)
g.map(sns.boxplot, "sex", "total_bill", palette='viridis', order=['Male', 'Female'])
plt.show()

Je veux maintenant dessiner des lignes horizontales distinctes dans chacune des parcelles. Par exemple, une ligne horizontale (avec coordonnée (0,10)) niquement dans le graphique de gauche et une autre ligne horizontale (avec les coordonnées (0,30)) niquement dans le graphique de droite.

Comment puis-je m'y prendre?

11
BCArg

Vous pouvez obtenir une liste des axes utilisés dans le FacetGrid en utilisant FacetGrid.axes qui renvoie les axes utilisés. Vous pouvez ensuite effectuer toutes les opérations matplotlib normales en utilisant ces axes, comme axhline pour les lignes horizontales, ou plt.text pour mettre du texte sur les axes:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")

# Plot using Facegrid, separated by smoke
plt.style.use('ggplot')
g = sns.FacetGrid(tips, col="smoker", size=5, aspect=1.5)
g.map(sns.boxplot, "sex", "total_bill", palette='viridis', order=['Male', 'Female'])

ax1, ax2 = g.axes[0]

ax1.axhline(10, ls='--')
ax2.axhline(30, ls='--')

ax1.text(0.5,25, "Some text")
ax2.text(0.5,25, "Some text")

plt.show()

enter image description here

1
DavidG

De plus, si vous avez un tas de grilles que vous souhaitez ajouter une ligne horizontale (disons à y = 10) à tous, vous pouvez simplement "mapper" le "plt.axhline" avec votre objet grille:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
# Plot using Facegrid, separated by smoke
plt.style.use('ggplot')
g = sns.FacetGrid(tips, col="smoker", size=5, aspect=1.5)
g.map(sns.boxplot, "sex", "total_bill", palette='viridis', order=['Male', 'Female'])

g.map(plt.axhline, y=10, ls='--', c='red')
0
HosseinD

Il y a axhline et hlines. Exemple simple:

chart = sns.relplot(x="x", y="y", kind="line", data=df)

chart.axes[0][0].axhline(y = 10, color='black', linewidth=2, alpha=.7)
chart.axes[0][0].hlines( y = 20, color='black', linewidth=2, alpha=.7, 
                         xmin = 30, xmax = 50) 

On dirait que hlines autorise min-max ( documentation ) mais pas axhline.

0
Boris Yakubchik