web-dev-qa-db-fra.com

Comment puis-je ouvrir la fenêtre matplotlib interactive dans IPython notebook?

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.

109
metakermit

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.

114
Adrian Martin

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.

53
volodymyr

À 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)

28
tacaswell

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...
4
Bill Moore

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:

  • Tracés vectoriels que vous pouvez télécharger aux formats .png, .jpg et .svg pour éviter les problèmes de résolution
  • Graphiques interactifs (zoom, glisser, survoler des points, ...)
  • Utilisable dans un cahier IPython
  • Explorez des centaines de structures de données en même temps à l'aide des fonctionnalités de traçage asynchrone.

Disclaimer: Je suis le développeur de la bibliothèque

3
arnoutaertgeerts

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

2
Marcin Lentner