web-dev-qa-db-fra.com

Tracé avec Seaborn à l'aide de l'interface matplotlib orientée objet

Je préfère fortement utiliser matplotlib in OOP style:

f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)

Cela facilite le suivi de plusieurs chiffres et sous-parcelles.

Question: Comment utiliser Seaborn de cette façon? Ou, comment changer cet exemple en OOP style? Comment dire seaborn fonctions de traçage comme lmplot que Figure ou Axes il parcourt?

87
Frozen Flame

Cela dépend un peu de la fonction de navigation que vous utilisez.

Les fonctions de traçage dans Seaborn sont généralement divisées en deux classes

  • Fonctions "au niveau des axes", y compris regplot, boxplot, kdeplot et bien d'autres
  • Fonctions "au niveau de la figure", y compris lmplot, factorplot, jointplot et un ou deux autres

Le premier groupe est identifié en prenant un argument explicite ax et en retournant un objet Axes. Comme cela le suggère, vous pouvez les utiliser dans un style "orienté objet" en leur transmettant votre Axes:

f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)

Les fonctions au niveau des axes ne dessineront que sur un Axes et ne gêneront pas la figure, elles pourront donc parfaitement coexister dans un script matplotlib orienté objet.

Le second groupe de fonctions (au niveau de la figure) se distingue par le fait que le tracé résultant peut potentiellement inclure plusieurs axes qui sont toujours organisés de manière "significative". Cela signifie que les fonctions doivent avoir un contrôle total sur la figure, il est donc impossible de tracer, par exemple, un lmplot sur une qui existe déjà. L'appel de la fonction initialise toujours une figure et la configure pour le tracé spécifique dessiné.

Cependant, une fois que vous avez appelé lmplot, il retournera un objet du type FacetGrid . Cet objet a quelques méthodes pour opérer sur le tracé résultant qui en savent un peu sur la structure du tracé. Il expose également la figure sous-jacente et le tableau d'axes au FacetGrid.fig et FacetGrid.axes arguments. La fonction jointplot est très similaire, mais elle utilise un objet JointGrid . Donc, vous pouvez toujours utiliser ces fonctions dans un contexte orienté objet, mais toute votre personnalisation doit venir après que vous ayez appelé la fonction.

196
mwaskom