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é?

DR
la source
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()
Peter
la source
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).

Eric O Lebigot
la source
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
17

Essaye ça:

import matplotlib
matplotlib.use('TkAgg') 

AVANT d'importer pylab

linhares
la source
11
Que doit-il faire?
Nathan Fellman
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()
néobot
la source
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

Matti Lyra
la source
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
calvinvette
la source
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.

Keflavich
la source
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
Scofield77
la source
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']
dashesy
la source
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

PyMatFlow
la source
-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.

ramsey0
la source
2
Cela garantit simplement l' matplotlibinstallation, sans affecter la manière dont la gestion des fenêtres est effectuée.
tacaswell