web-dev-qa-db-fra.com

Comment rendre le tracé matplotlib de l'ordinateur portable IPython en ligne

J'essaie d'utiliser le cahier IPython sur MacOS X avec Python 2.7.2 et IPython 1.1.0.

Je ne parviens pas à afficher les graphiques matplotlib en ligne.

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

J'ai également essayé %pylab inline et les arguments de ligne de commande ipython --pylab=inline, mais cela ne fait aucune différence.

x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp')
plt.show()

Au lieu des graphiques en ligne, je reçois ceci:

<matplotlib.figure.Figure at 0x110b9c450>

Et matplotlib.get_backend() montre que j'ai le backend 'module://IPython.kernel.zmq.pylab.backend_inline'.

760
Ian Fiske

J'ai utilisé %matplotlib inline dans la première cellule du cahier et cela fonctionne. Je pense que tu devrais essayer:

%matplotlib inline

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

Vous pouvez également toujours démarrer tous vos noyaux IPython en mode intégré par défaut en définissant les options de configuration suivantes dans vos fichiers de configuration:

c.IPKernelApp.matplotlib=<CaselessStrEnum>
  Default: None
  Choices: ['auto', 'gtk', 'gtk3', 'inline', 'nbagg', 'notebook', 'osx', 'qt', 'qt4', 'qt5', 'tk', 'wx']
  Configure matplotlib for interactive use with the default matplotlib backend.
1055
eNord9

Si votre version de matplotlib est supérieure à 1.4, il est également possible d'utiliser

IPython 3.x et supérieur

%matplotlib notebook

import matplotlib.pyplot as plt

versions plus anciennes

%matplotlib nbagg

import matplotlib.pyplot as plt

Les deux activeront le nbagg backend , qui permet l’interactivité.

Example plot with the nbagg backend

204
Løiten

Ctrl + Enter

%matplotlib inline

Ligne magique: D

Voir: Tracer avec Matplotlib .

87
CodeFarmer

Je ne suis pas sûr de savoir pourquoi joaquin a posté sa réponse sous forme de commentaire, mais c'est la bonne réponse:

démarrer ipython avec ipython notebook --pylab inline

Edit: Ok, ceci est maintenant obsolète comme dans le commentaire ci-dessous. Utilisez la commande magique %pylab inline.

24
foobarbecue

Pour rendre matplotlib inline par défaut dans Jupyter (IPython 3):

  1. Editer le fichier ~/.ipython/profile_default/ipython_config.py

  2. Ajouter la ligne c.InteractiveShellApp.matplotlib = 'inline'

Veuillez noter que l'ajout de cette ligne à ipython_notebook_config.py ne fonctionnerait pas. Sinon, cela fonctionne bien avec Jupyter et IPython 3.1.0

13
volodymyr

Je suis d'accord avec foobarbecue (je n'ai pas assez de récs pour pouvoir simplement insérer un commentaire sous son post):

Il est maintenant recommandé que le cahier python ne soit pas lancé avec l'argument --pylab, et selon Fernando Perez (créateur de ipythonnb) %matplotlib inline devrait être la commande initiale du cahier.

Voir ici: http://nbviewer.ipython.org/github/ipython/ipython/blob/1.x/examples/notebooks/Part%203%20-%20Plotting%20with%20Matplotlib.ipynb

10
thescoop

J'ai trouvé une solution de contournement assez satisfaisante. J'ai installé Anaconda Python et cela fonctionne maintenant hors de la boîte pour moi.

7
Ian Fiske

J'ai fait installer l'anaconda mais matplotlib ne complote pas

Il commence à tracer quand j'ai fait ça

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  
5
Raymond

Sur Ubuntu, vous pouvez supprimer %matplotlib inline tant que vous avez plt.show() après la création du graphique.

4
tcratius

Vous pouvez simuler ce problème avec une erreur de syntaxe. Toutefois, %matplotlib inline ne résoudra pas le problème.

D'abord un exemple de la bonne façon de créer un tracé. Tout fonctionne comme prévu avec les importations et la magie que eNord9 fournie.

df_randNumbers1 = pd.DataFrame(np.random.randint(0,100,size=(100, 6)), columns=list('ABCDEF'))

df_randNumbers1.ix[:,["A","B"]].plot.kde()

Cependant, en laissant le () à la fin du type de tracé, vous recevez une non-erreur quelque peu ambiguë.

Code Erronious:

df_randNumbers1.ix[:,["A","B"]].plot.kde

Exemple d'erreur:

<bound method FramePlotMethods.kde of <pandas.tools.plotting.FramePlotMethods object at 0x000001DDAF029588>>

À part ce message d'une ligne, il n'y a aucune trace de pile ou autre raison évidente de penser que vous avez commis une erreur de syntaxe. L'intrigue ne s'imprime pas.

2
Blake M

J'ai eu le même problème lorsque j'exécutais les commandes de traçage dans des cellules distinctes dans Jupyter:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         <Figure size 432x288 with 0 Axes>                      #this might be the problem
In [4]:  ax = fig.add_subplot(1, 1, 1)
In [5]:  ax.scatter(x, y)
Out[5]:  <matplotlib.collections.PathCollection at 0x12341234>  # CAN'T SEE ANY PLOT :(
In [6]:  plt.show()                                             # STILL CAN'T SEE IT :(

Le problème a été résolu en fusionnant les commandes de traçage dans une seule cellule:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         ax = fig.add_subplot(1, 1, 1)
         ax.scatter(x, y)
Out[3]:  <matplotlib.collections.PathCollection at 0x12341234>
         # AND HERE APPEARS THE PLOT AS DESIRED :)
0
krubo