J'utilise IPython avec --pylab=inline
et je souhaite parfois basculer rapidement vers l'interface graphique interactive matplotlib pour visualiser les tracés (celle qui apparaît lorsque vous tracez quelque chose dans une console de terminal Python.). Comment pourrais-je faire ça? De préférence sans quitter ou redémarrer mon ordinateur portable.
Le problème avec les tracés en ligne dans le cahier IPy est qu’ils ont une résolution limitée et que je ne peux pas les agrandir pour voir certaines parties plus petites. Avec l’interface graphique de maptlotlib qui part d’un terminal, je peux sélectionner un rectangle du graphique que je souhaite agrandir et les axes s’ajuster en conséquence. J'ai essayé d'expérimenter avec
from matplotlib import interactive
interactive(True)
et
interactive(False)
mais cela n'a rien fait. Je n'ai trouvé aucun indice en ligne non plus.
Selon la documentation , vous devriez être en mesure de passer de l'un à l'autre comme ceci:
In [2]: %matplotlib inline
In [3]: plot(...)
In [4]: %matplotlib qt # wx, gtk, osx, tk, empty uses default
In [5]: plot(...)
et cela fera apparaître une fenêtre de tracé normale (un redémarrage sur le bloc-notes peut être nécessaire).
J'espère que ça aide.
Si tout ce que vous voulez faire est de passer des graphiques en ligne aux graphiques interactifs et inversement (afin de pouvoir effectuer un panoramique/zoom), il est préférable d’utiliser la magie% matplotlib.
#interactive plotting in separate window
%matplotlib qt
et retour au html
#normal charts inside notebooks
%matplotlib inline
La magie% pylab importe beaucoup d'autres choses et peut même entraîner un conflit. Il fait "de pylab import *".
Vous pouvez également utiliser le nouveau backend pour ordinateur portable (ajouté dans matplotlib 1.4):
#interactive charts inside notebooks, matplotlib 1.4+
%matplotlib notebook
Si vous voulez avoir plus d'interactivité dans vos graphiques, vous pouvez regarder mpld et bokeh. mpld3 est génial, si vous n'avez pas une tonne de points de données (par exemple, <5k +) et que vous voulez utiliser la syntaxe normale de matplotlib, mais plus d'interactivité, comparé à% matplotlib notebook. Bokeh peut gérer beaucoup de données, mais vous devez apprendre sa syntaxe car il s'agit d'une bibliothèque séparée.
Aussi, vous pouvez vérifier pivottablejs (pip install pivottablejs)
from pivottablejs import pivot_ui
pivot_ui(df)
Même si l'exploration interactive de données est intéressante, elle peut totalement gâcher la reproductibilité. C'est ce qui m'est arrivé. J'essaie donc de ne l'utiliser que très tôt et de passer à matplotlib/seaborn pur en ligne, une fois que j'ai compris les données.
À partir de matplotlib 1.4.0, il existe désormais un backend interactif à utiliser dans le bloc-notes.
%matplotlib notebook
Il y a quelques versions d'IPython qui n'ont pas cet alias enregistré, la solution est la suivante:
%matplotlib nbagg
Si cela ne fonctionne pas, mettez à jour votre IPython.
Pour jouer avec ça, allez tmpnb.org
et coller
%matplotlib notebook
import pandas as pd
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
import seaborn as sns
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,
columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
df.plot(); plt.legend(loc='best')
dans une cellule de code (ou simplement modifier le cahier de démonstration python existant)
J'utilise ipython dans "jupyter QTConsole" d'Anaconda à l'adresse www.continuum.io/downloads le 28/05/20117.
Voici un exemple pour basculer entre une fenêtre séparée et un mode de tracé en ligne utilisant la magie ipython.
>>> import matplotlib.pyplot as plt
# data to plot
>>> x1 = [x for x in range(20)]
# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close()
# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close()
# Show in separate window
>>> %matplotlib
>>> plt.plot(x1)
>>> plt.close()
# Show in console window
>>> %matplotlib inline
>>> plt.plot(x1)
>>> plt.close()
# Note: the %matplotlib magic above causes:
# plt.plot(...)
# to implicitly include a:
# plt.show()
# after the command.
#
# (Not sure how to turn off this behavior
# so that it matches behavior without using %matplotlib magic...)
# but its ok for interactive work...
Une meilleure solution à votre problème pourrait être la bibliothèque Charts . Il vous permet d'utiliser l'excellente bibliothèque javascript Highcharts pour créer de superbes graphiques interactifs. Highcharts utilise la balise HTML svg
de sorte que tous vos graphiques sont en réalité des images vectorielles.
Certaines fonctionnalités:
Disclaimer: Je suis le développeur de la bibliothèque
Redémarrez le noyau et effacez la sortie (si ce n’est pas avec le nouveau cahier), puis exécutez
%matplotlib tk
Pour plus d'informations, allez à traçage avec matplotlib