J'ai du mal à afficher des tracés à l'intérieur des widgets de l'onglet Jupyter. Considérez l'extrait de code suivant:
import matplotlib.pyplot as plt
import pandas as pd
import ipywidgets as widgets
import numpy as np
out1 = widgets.Output()
out2 = widgets.Output()
data1 = pd.DataFrame(np.random.normal(size = 50))
data2 = pd.DataFrame(np.random.normal(size = 100))
with out1:
fig1, axes1 = plt.subplots()
data1.hist(ax = axes1)
display(fig1)
with out2:
fig2, axes2 = plt.subplots()
data2.hist(ax = axes2)
display(fig2)
tab = widgets.Tab(children = [out1, out2])
tab.set_title(0, 'First')
tab.set_title(1, 'Second')
display(tab)
(J'exécute Python 3.5.2, Jupyter 4.4.0, ipywidgets 7.2.1 sur Ubuntu 16.04 dans un environnement virtuel.)
Si je mets ce code sur la première ligne du cahier et l'exécute, je vois un widget d'onglet avec deux onglets, chacun affichant une chaîne, mais pas l'intrigue:
Si je l'exécute une deuxième fois, ou si je le relance en mettant tout après l'importation de matplotlib
dans une deuxième cellule, je vois un widget d'onglet avec un tracé sur chaque onglet, mais j'obtiens les deux tracés affichés une deuxième fois en dehors des onglets.
Je peux me débarrasser des affichages supplémentaires en enveloppant mon code dans des appels à plt.ioff
et plt.ion
, mais il m'a été suggéré qu'il s'agit d'un hack. Et en tout cas, cela ne fait pas afficher à matplotlib les tracés dans la première cellule.
Question : Quelle est la bonne façon d'afficher les tracés à l'intérieur des onglets?
J'ai ajouté quelques éléments pour que votre code fonctionne comme vous le souhaitez
%matplotlib inline
En haut de la celluledisplay(fig)
par des appels plt.show(fig)
.%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import ipywidgets as widgets
import numpy as np
out1 = widgets.Output()
out2 = widgets.Output()
data1 = pd.DataFrame(np.random.normal(size = 50))
data2 = pd.DataFrame(np.random.normal(size = 100))
tab = widgets.Tab(children = [out1, out2])
tab.set_title(0, 'First')
tab.set_title(1, 'Second')
display(tab)
with out1:
fig1, axes1 = plt.subplots()
data1.hist(ax = axes1)
plt.show(fig1)
with out2:
fig2, axes2 = plt.subplots()
data2.hist(ax = axes2)
plt.show(fig2)