matplotlib n'affiche pas mes dessins bien que j'appelle pyplot.show ()


175

Aide requise sur matplotlib. Oui, je n'ai pas oublié d'appeler pyplot.show ().

$ ipython --pylab

import matplotlib.pyplot as p 
p.plot(range(20), range(20))

Il revient matplotlib.lines.Line2D at 0xade2b2ccomme sortie.

p.show()

Il ne se passe rien. Aucun message d'erreur. Pas de nouvelle fenêtre. Rien. J'installe matplotliben utilisant pip et je n'ai pris aucun message d'erreur.

Détails:

J'utilise,

  • Ubuntu
  • IPython v0.11
  • Python v2.6.6
  • matplotlib v1.0.1

Réponses:


177

Si je configure mon backend sur templatein ~/.matplotlib/matplotlibrc, je peux reproduire vos symptômes:

~ / .matplotlib / matplotlibrc:

# backend      : GtkAgg
backend      : template

Notez que le fichier matplotlibrcpeut ne pas être dans le répertoire ~/.matplotlib/. Dans ce cas, le code suivant montre où il se trouve:

>>> import matplotlib
>>> matplotlib.matplotlib_fname()

In [1]: import matplotlib.pyplot as p

In [2]: p.plot(range(20),range(20))
Out[2]: [<matplotlib.lines.Line2D object at 0xa64932c>]

In [3]: p.show()

Si vous modifiez ~/.matplotlib/matplotlibrcet changez le backend en quelque chose comme GtkAgg, vous devriez voir un tracé. Vous pouvez lister tous les backends disponibles sur votre machine avec

import matplotlib.rcsetup as rcsetup
print(rcsetup.all_backends)

Il devrait renvoyer une liste comme:

['GTK', 'GTKAgg', 'GTKCairo', 'FltkAgg', 'MacOSX', 'QtAgg', 'Qt4Agg',
'TkAgg', 'WX', 'WXAgg', 'CocoaAgg', 'agg', 'cairo', 'emf', 'gdk', 'pdf',
'ps', 'svg', 'template']

Référence:


2
J'ai essayé mais j'ai eu une erreur du genre:ImportError: No module named _backend_gdk
Baskaya

6
Désolé pour beaucoup de commentaires. Ça marche. J'ai essayé Qt4Agg et j'ai frappé. Merci :) .. Dernière chose, où puis-je trouver le matplotlibrc par défaut ou y a-t-il un moyen de le créer?
Baskaya

Désolé pour le désordre. Je pense avoir trouvé
Baskaya

8
Cette réponse est ancienne, la configuration devrait maintenant être dans ~/.config/matplotlib/matplotlibrc(pour python 3, au moins). Je viens d'avoir un problème lié, et je pense qu'il a été causé par l'utilisation de matplotlib dans python 2.7, qui a créé un ~/.matplotlib/répertoire et a empêché python 3 de lire la configuration dans ~/.config/matplotlib/. La suppression a ~/.matplotlib/résolu le problème pour moi.
rien101

5
6 ans plus tard et ce problème existe toujours ... Maintenant, je me souviens pourquoi je déteste Python: un problème sur chaque ligne de code.
pookie

70

J'ai rencontré exactement le même problème sur Ubuntu 12.04, car j'ai installé matplotlib (dans un virtualenv) en utilisant

pip install matplotlib

Pour faire court, mon conseil est: n'essayez pas d'installer matplotlib en utilisant pip ou à la main; laissez un vrai gestionnaire de paquets (par exemple apt-get / synaptic) l'installer et toutes ses dépendances pour vous.

Malheureusement, les backends de matplotlib (méthodes alternatives pour rendre réellement vos tracés) ont toutes sortes de dépendances que pip ne traitera pas. Pire encore, il échoue silencieusement; pip install matplotlibautrement dit , semble installer matplotlib avec succès. Mais lorsque vous essayez de l'utiliser (par exemple pyplot.show()), aucune fenêtre de tracé n'apparaîtra. J'ai essayé tous les différents backends suggérés par les internautes (Qt4Agg, GTK, etc.), et ils ont tous échoué (c'est-à-dire lorsque j'ai essayé d'importer matplotlib.pyplot, j'obtiens ImportErrorparce qu'il essaie d'importer une dépendance qui manque). J'ai ensuite recherché comment installer ces dépendances, mais cela m'a simplement donné envie de renoncer à utiliser pip (dans virtualenv) comme solution d'installation viable pour tout package qui a des dépendances de package non Python.

L'expérience entière m'a renvoyé à ramper vers apt-get / synaptic (c'est-à-dire le gestionnaire de paquets Ubuntu) pour installer un logiciel comme matplotlib. Cela a parfaitement fonctionné. Bien sûr, cela signifie que vous ne pouvez installer que dans vos répertoires système, pas de bonté virtualenv, et vous êtes coincé avec les versions distribuées par Ubuntu, ce qui peut être très en retard sur la version actuelle ...


2
Votre réponse est un BIT long, vous pourriez envisager de raccourcir le PO.
theJollySin

5
Avez-vous essayé l' --system-site-packagesoption?
Tianyang Li

1
% Christopher Lee Le problème avec les chiffres ne montrant sans aucune erreur / autre plainte est parce que le back - end par défaut lorsque vous pip installest agg. Je ne sais pas pourquoi, mais vous pouvez le changer selon la réponse de l'unutbu. pipprésente l'avantage majeur d'installer une version à jour - aptinstalle une version obsolète. Parfois, il y a des corrections de bogues / de nouvelles fonctionnalités que vous voulez / avez besoin.
drevicko

2
La simple désactivation a virtualenvfonctionné! Et j'ai pu installer matplotlib 1.4 à partir du système source dans tout le système (sur Ubuntu), mais pas sous virtualenv.
osa

1
Et quelle est la solution pour ceux d'entre nous bloqués sur des machines de travail Windows qui ne peuvent pas utiliser apt-get?
ale19

34

% matplotlib en ligne

Pour moi travaillant avec un ordinateur portable, ajouter la ligne ci-dessus avant que l'intrigue ne fonctionne.


J'avais besoin d'utiliser %pylab inlinesur mon ordinateur portable comme indiqué par @Bhanu Pratap Singh
Reed Sandberg

10

Pour référence future,

J'ai rencontré le même problème - pylab ne s'affichait pas sous ipython. Le problème a été résolu en modifiant le fichier de configuration d'ipython {ipython_config.py}. Dans le fichier de configuration

c.InteractiveShellApp.pylab = 'auto'

J'ai changé 'auto' en 'qt' et maintenant je vois des graphiques


5
ou en utilisant "ipython --pylab = qt"
andrew cooke

Cela fonctionne, mais il est seulement une solution partielle: Si votre back - end par défaut est agg, je ne sais pas chose qui %pylab inlineva travailler, non tracés montrent lorsque vous exécutez les scripts directement par exemple: python myscript.py. La réponse d'unutbu devrait le réparer partout.
drevicko


8

Ce qui a résolu mon problème était simplement d'utiliser les deux lignes ci-dessous dans le cahier ipython en haut

%matplotib inline
%pylab inline

Et ça a marché. J'utilise Ubuntu16.04 et ipython-5.1


Veuillez corriger la mise en forme des commentaires ci-dessus ... Merci.
Saras Arya

Terminé - Bien que cet article de blog blesse le pylab, vous aurez une idée de pourquoi l'ajout le %pylab inlinefait fonctionner.
Bhanu Pratap Singh

2

J'ai dû installer matplotlib à partir des sources pour que cela fonctionne. Les principales instructions (à partir de http://www.pyimagesearch.com/2015/08/24/resolved-matplotlib-figures-not-showing-up-or-displaying/ ) sont:

$ workon plotting
$ pip uninstall matplotlib
$ git clone https://github.com/matplotlib/matplotlib.git
$ cd matplotlib
$ python setup.py install

En modifiant le backend, comme le dit @unutbu, je viens de rencontrer beaucoup plus de problèmes avec tous les différents backends qui ne fonctionnent pas non plus.


1
A travaillé un régal, utilisé uniquement les étapes de configuration du clone git et de python, mais lorsque je l'exécute avec plt.show (), aucun problème.
Steve

2

L'ajout des deux lignes suivantes avant d'importer pylab semble fonctionner pour moi

import matplotlib
matplotlib.use("gtk")

import sys
import pylab
import numpy as np

0

Assurez-vous que ce script de démarrage est activé: (Préférences> Console> Options avancées)

/usr/lib/python2.7/dist-packages/spyderlib/scientific_startup.py

Si le PYTHONSTARTUP standard est activé, vous n'aurez pas de tracé interactif


0

Similaire à @Rikki, j'ai résolu ce problème en mettant matplotlibà jour avec pip install matplotlib --upgrade. Si vous ne pouvez pas mettre à niveau, la désinstallation et la réinstallation peuvent fonctionner.

pip uninstall matplotlib
pip install matplotlib

0

Pour moi, le problème se produit si je crée simplement un fichier vide matplotlibrc sous ~/.matplotlibmacOS. L'ajout de "backend: macosx" corrige le problème.

Je pense que c'est un bug: si ce backendn'est pas spécifié dans mon, matplotlibrcil devrait prendre la valeur par défaut.



0

J'ai trouvé que j'avais besoin window = Tk()et puiswindow.mainloop()


Pouvez-vous ajouter un peu d'explication? En quoi votre solution est-elle différente des autres?
Ralf Stubner

-2

Pour Ubuntu 12.04:

sudo apt-get install python-qt4
virtualenv .env --no-site-packages
source .env/bin/activate
easy_install -U distribute
ln -s /usr/lib/python2.7/dist-packages/PyQt4 .
ln -s /usr/lib/python2.7/dist-packages/sip.so .
pip install matplotlib
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.