2017-09-19 1 views
0

Ma première question python, cependant.Comment afficher le graphique qui a été enregistré dans une variable?

Considérez-moi travailler dans le cahier jupyter avec seaborn. Supposons que j'ai créé un terrain et enregistré à une variable:

g = sns.jointplot(ap['ap_lo'], ap['ap_hi']); 

Il sera affiché une fois, parce que j'addeed %matplotlib inline au début.

Maintenant, après quelques changements, je veux afficher g nouveau:

ax = g.ax_joint 
ax.set_xscale('log') 
ax.set_yscale('log') 
g.ax_marg_x.set_xscale('log') 
g.ax_marg_y.set_yscale('log') 

sns.plt.show() 

Comme vous pouvez le voir, je l'appelle sns.plt.show(), mais il n'a pas d'effet. J'ai également essayé de mettre g; ou g; sns.plt.show() à la fin.

+0

'g.show()' peut-être? –

+0

AttributeError: objet 'JointGrid' n'a aucun attribut 'show' – kelin

+0

La question similaire, qui ne fonctionne pas pour moi: https://stackoverflow.com/q/40965733/3050403 – kelin

Répondre

1

Dans le cas de la question, g est une instance JointGrid.

Pour afficher une figure dans une cellule de carnet jupyter, vous devez indiquer la figure. plt.show ne fonctionnera pas dans une nouvelle cellule. Le chiffre créé par un JointGrid est disponible via l'attribut fig. D'où la solution est de taper

g.fig 

Exemple complet Image:

enter image description here

0

Dans la documentation de seaborn, sns.jointplot() renvoie un objet JointGrid. Et cet objet a quelques fonctions pour afficher l'intrigue.

Vous pouvez consulter la documentation here.

En pratique, vous devez appeler g.plot ou g.plot_joint pour afficher votre graphique.

Mise à jour

Après la plongée dans le code source, je trouve joinplot utiliser les fonctions suivantes si vous utilisez des paramètres par défaut:

joint_kws = {} 
joint_kws.update(kwargs) 

marginal_kws = {} 

color = color_palette()[0] 
color_rgb = mpl.colors.colorConverter.to_rgb(color) 
colors = [utils.set_hls_values(color_rgb, l=l) 
      for l in np.linspace(1, 0, 12)] 

grid = JointGrid(x, y, data, dropna=dropna, 
       size=size, ratio=ratio, space=space, 
       xlim=xlim, ylim=ylim) 
... 
joint_kws.setdefault("color", color) 
grid.plot_joint(plt.scatter, **joint_kws) 

marginal_kws.setdefault("kde", False) 
marginal_kws.setdefault("color", color) 
grid.plot_marginals(distplot, **marginal_kws) 
... 

Je pense qu'il est assez clair.

+0

Merci pour la réponse. Les deux 'plot' et' plot_joint' requièrent des paramètres. Quels paramètres dois-je passer à cette fonction si je ne veux pas laisser l'intrigue inchangée? Seule l'échelle devrait devenir logarithmique. – kelin

+0

@kelin mis à jour. – Sraw

+0

J'ai également regardé le code source et rouge la documentation plus attentivement. 'plot 'équivaut à créer un nouveau tracé sur JointGreed, et' plot_joint' crée les points. J'ai besoin d'afficher un tracé existant avec une échelle d'axes modifiée, donc je ne peux pas accepter cette réponse. – kelin