Comment tracer plusieurs Seaborn Jointplot dans l'intrigue secondaire
Je vais avoir des problèmes en plaçant Seaborn Jointplot
à l'intérieur d'un multicolumn subplot
.
import pandas as pd
import seaborn as sns
df = pd.DataFrame({'C1': {'a': 1,'b': 15,'c': 9,'d': 7,'e': 2,'f': 2,'g': 6,'h': 5,'k': 5,'l': 8},
'C2': {'a': 6,'b': 18,'c': 13,'d': 8,'e': 6,'f': 6,'g': 8,'h': 9,'k': 13,'l': 15}})
fig = plt.figure();
ax1 = fig.add_subplot(121);
ax2 = fig.add_subplot(122);
sns.jointplot("C1", "C2", data=df, kind='reg', ax=ax1)
sns.jointplot("C1", "C2", data=df, kind='kde', ax=ax2)
Avis que seule une partie de la jointplot
est placé à l'intérieur de l'intrigue secondaire et le reste de la gauche à l'intérieur d'une parcelle deux images. Ce que je veux est à la fois le distributions
également inséré à l'intérieur de la subplots
.
Quelqu'un peut-il aider?
haha, Michael, avec assez de piratage, il peut être possible 🙂
OriginalL'auteur Afloz | 2016-01-27
Vous devez vous connecter pour publier un commentaire.
Il ne peut pas être fait facilement sans le piratage.
jointplot
appelsJointGrid
méthode, qui à son tour crée une nouvellefigure
objet à chaque fois qu'il est appelé.Donc, l'astuce est de faire deux jointplots (
JG1
JG2
), puis faites une nouvelle figure, puis migrer les axes des objets à partir deJG1
JG2
à la nouvelle figure créé.Enfin, nous pouvons nous ajuster les tailles et les positions des sous-intrigues dans la nouvelle figure que nous venons de créer.
C'est un hack parce que nous sommes maintenant à l'aide de
_axstack
et_add_key
méthodes privées, qui pourrait et pourrait ne pas rester le même, car ils sont maintenant dansmatplotlib
les futures versions.distplot
,regplot
, etkdeplot
sur elle.Tout à fait d'accord. Mais la réutilisabilité sage, cela signifierait pour dupliquer beaucoup de codes déjà écrit dans
joint_plot
. Peut-êtreJointGird
peut prendre un paramètre optionnel pour spécifier le traçage des axes/de l'axe. Comportement actuel signifie que si l'un approvisionnementax=some_axis
, seul leregplot
intrigue va aller quesome_axis
.C'est juste le comportement qui résulte de quelqu'un à l'aide de la fonction d'une manière qui n'a jamais été prévu.
Tout simplement incroyable, c'est la seule solution que j'ai pu trouver. Merci
Comment voulez-vous dire, "à l'aide de la fonction d'une manière qui n'a jamais été destiné"? Pouvez-vous expliquer?
OriginalL'auteur CT Zhu
Déplacer les axes dans matplotlib n'est pas aussi facile qu'il l'habitude d'être dans les versions précédentes. Ci-dessous est de travailler avec la version actuelle de matplotlib.
Comme cela a été souligné à plusieurs endroits (cette question, aussi ce problème) plusieurs seaborn commandes de créer leur propre figure automatiquement. C'est codé en dur dans le seaborn code, donc il n'y a actuellement aucun moyen de produire de telles parcelles existantes sur les chiffres. Ceux-ci sont
PairGrid
,FacetGrid
,JointGrid
,pairplot
,jointplot
etlmplot
.Il y a un seaborn fourche disponible qui permettrait de fournir une intrigue secondaire grille pour les classes respectives telles que la parcelle est créé dans une figure. Pour l'utiliser, vous devez copier le
axisgrid.py
de la fourche à la seaborn dossier. Notez que ce n'est actuellement limités à être utilisé avec matplotlib 2.1 (éventuellement 2.0).Une alternative pourrait être de créer une seaborn figure et de copier les axes d'une autre figure. Le principe de ce qui est montré dans cette réponse et pourrait être étendu à Searborn parcelles. La mise en œuvre est un peu plus compliqué que je l'avais initialement prévu. Ce qui suit est une classe
SeabornFig2Grid
qui peut être appelée avec un seaborn grille d'instance (le retour de l'une des commandes ci-dessus), un matplotlib figure et unsubplot_spec
, qui est une position d'ungridspec
de la grille.L'utilisation de cette classe devrait ressembler à ceci:
Note qu'il pourrait y avoir certains inconvénients à partir de la copie de haches et de la ci-dessus n'est pas (encore) testé à fond.
Génial! Elle fonctionne.
Quelles sont les modifications qui seraient nécessaires pour ClusterGrid?
Vous essentiellement besoin de recréer de la grille utilisée par seaborn. Ce serait similaire à
_movejointgrid
mais avec quatre axes.Je pense que je me souviens pas y compris clustergrid ici, car il faudrait presque autant de code que de la création de la sorte de complot manuellement.
OriginalL'auteur ImportanceOfBeingErnest