Aucune fenêtre de tracé dans matplotlib


89

Je viens d'installer matplotlib dans Ubuntu 9.10 en utilisant le système de paquets synaptic. Cependant, lorsque j'essaye l'exemple simple suivant

>>> from pylab import plot;
>>> plot([1,2,3],[1,2,3])
[<matplotlib.lines.Line2D object at 0x9aa78ec>]

Je n'ai pas de fenêtre de tracé. Des idées sur la façon d'afficher la fenêtre de tracé?


8
pylab n'affiche pas le tracé par défaut, car le dessin et la mise à jour constante peuvent être coûteux. Vous devez faire un explicite show().
Alok Singhal

1
Quelques documents officiels sur ce problème: matplotlib.org/faq
...

Réponses:


138

Vous pouvez taper

import pylab
pylab.show()

ou mieux, utilisez ipython -pylab.


Comme l'utilisation de pylab n'est plus recommandée , la solution serait de nos jours

import matplotlib.pyplot as plt

plt.plot([1,2,3])

plt.show()

38

pylab.show() fonctionne mais bloque (vous devez fermer la fenêtre).

Une solution beaucoup plus pratique consiste à faire pylab.ion()(mode interactif activé) au démarrage: toutes les commandes (les équivalents pylab de) pyplot.*affichent leur tracé immédiatement. Plus d'informations sur le mode interactif peuvent être trouvées sur le site Web officiel.

Je seconde également en utilisant le encore plus pratique ipython -pylab( --pylab, dans les versions plus récentes), qui vous permet de sauter la from … import …partie ( %pylabfonctionne aussi dans les nouvelles versions d'IPython).


1
mais vous devez d' pylab.show()abord appeler pour ouvrir une figure.
Steve Tjoa

3
@Steve: mon expérience est que cela dépend fortement du backend. Sur Mac OS X avec le shell Python standard, je n'ai pas à faire show () (ou draw (), d'ailleurs): plot () ouvre une nouvelle fenêtre.
Eric O Lebigot

1
Ah ok. Bon point. Je n'ai d'expérience qu'avec ipython sous Linux.
Steve Tjoa

draw () ne fonctionne pas pour moi, mais pylab.ion () fonctionne. J'utilise OSx
user1506145

Même chose ici dans le shell Python avec le dernier Matplotlib. J'ai mis à jour ma réponse, merci.
Eric O Lebigot


11

L'extrait de code ci-dessous fonctionne à la fois sur Eclipse et sur le shell Python:

import numpy as np
import matplotlib.pyplot as plt

# Come up with x and y
x = np.arange(0, 5, 0.1)
y = np.sin(x)

# Just print x and y for fun
print x
print y

# Plot the x and y and you are supposed to see a sine curve
plt.plot(x, y)

# Without the line below, the figure won't show
plt.show()

Comme de nombreuses autres réponses le clarifient, cela peut fonctionner pour vous pour le moment, mais tout dépend de la configuration de votre backend matplotlib.
nealmcb

9

Des erreurs apparaissent? Cela peut être dû au fait de ne pas avoir configuré le backend. Vous pouvez le définir depuis l'interpréteur Python ou depuis un fichier de configuration ( .matplotlib/matplotlibrc) dans votre répertoire personnel.

Pour définir le backend dans le code, vous pouvez faire

import matplotlib
matplotlib.use('Agg')

où «Agg» est le nom du backend. Les backends présents dépendent de votre installation et de votre système d'exploitation.

http://matplotlib.sourceforge.net/faq/installing_faq.html#backends

http://matplotlib.org/users/customizing.html


1
Fonctionne totalement, merci. Pour être clair, la chose la plus simple à faire (une fois que vous savez que cela fonctionne bien sûr) est de configurer votre backend .matplotlib/matplotlibrcsur backend: Agg. Ensuite, vous n'avez pas à en faire explicitement useun à chaque fois :)
dsummersl

2

IPython moderne utilise l' --matplotlibargument " " avec un paramètre de backend facultatif. La valeur par défaut est "auto", ce qui est généralement suffisant sur Mac et Windows. Je ne l'ai pas testé sur Ubuntu ou sur toute autre distribution Linux, mais je m'attendrais à ce que cela fonctionne.

ipython --matplotlib

0

Si vous rencontrez un problème dans lequel pylab.show()la fenêtre IPython gèle (cela peut être spécifique à Mac OS X; pas sûr), vous pouvez cmd-c dans la fenêtre IPython, basculer vers la fenêtre de tracé, et elle éclatera.

Apparemment, les futurs appels à pylab.show()ne gèleront pas la fenêtre IPython, seulement le premier appel. Malheureusement, j'ai trouvé que le comportement de la fenêtre de tracé / des interactions avec show () change chaque fois que je réinstalle matplotlib, donc cette solution peut ne pas toujours tenir.


0

Si vous démarrez IPython avec l' --pylaboption, vous ne devriez pas avoir besoin d'appeler show()ou draw(). Essaye ça:

ipython  --pylab=inline

0

--pylabne fonctionne plus pour Jupyter , mais heureusement, nous pouvons ajouter un ajustement dans le ipython_config.pyfichier pour obtenir les deux pylabainsi que des autoreloadfonctionnalités.

c.InteractiveShellApp.extensions = ['autoreload', 'pylab']
c.InteractiveShellApp.exec_lines = ['%autoreload 2', '%pylab']

0

Si vous utilisez Anaconda et Spyder, la meilleure solution pour vous est la suivante:

Outils -> Préférences -> Console Ipython -> Section graphique

Puis dans la section Prise en charge des graphiques (Matplotlib) :

sélectionnez deux options disponibles

et dans le backend graphique :

sélectionnez Automatique


-5

Une autre possibilité lors de l'utilisation d'easy_install est que vous avez besoin de la version la plus récente de matplotlib. Essayer:

import pkg_resources
pkg_resources.require("matplotlib")

avant d'importer matplotlib ou l'un de ses modules.


2
Cela garantit simplement l' matplotlibinstallation, sans affecter la manière dont la gestion des fenêtres est effectuée.
tacaswell
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.