Matplotlib-Diagramme werden in Mac OSX nicht angezeigt?


77

Ich verwende Mac OSX 10.5.8. Ich habe matplotlib mit macports installiert. Ich bekomme einige Beispiele aus der matplotlib-Galerie wie diese, ohne Modifikation:

http://matplotlib.sourceforge.net/examples/api/unicode_minus.html

Ich führe es aus, erhalte keine Fehlermeldung, aber das Bild wird nicht angezeigt. Unter Linux Ubuntu verstehe ich es.

Wissen Sie, was hier falsch sein könnte?


In meinem Fall wurde die Handlung zunächst angezeigt und dann gestoppt, als ich einige andere Pakete wie pandasql, boxsdk usw. installierte [nicht sicher, was sie kaputt gemacht hat]. Durch die matplotliibNeuinstallation wurde mein Problem behoben. Viele gute Vorschläge / Korrekturen finden Sie unter den Antworten. Wenn keiner von ihnen hilft, installieren Sie matplotlib erneut, bevor Sie aufgeben.
Robert Ranjan

Antworten:


48

Ich kann dies auch an meinem Ende überprüfen. Um das zu beheben, habe ich Folgendes getan

sudo port install py25-matplotlib +cairo+gtk2
sudo port install py26-matplotlib +cairo+gtk2

Außerdem müssen wir das Standard-Backend in ein GUI-basiertes ändern.

Bearbeiten Sie die Datei ~/.matplotlib/matplotlibrcund fügen Sie hinzu:

backend: GTKCairo

Sie können auch Folgendes ausprobieren, sodass Sie möglicherweise das GTK- oder das Cairo-Backend nicht benötigen. Bearbeiten ~/.matplotlib/matplotlibrcund hinzufügen:

backend: MacOSX

Wenn der Port mit diesen Varianten installiert ist, funktioniert dies ebenfalls, es ist jedoch kein X11 erforderlich.


Der Fehler, den ich sah, war übrigens der folgende:

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/matplotlib/backends/__init__.py:41: UserWarning: 
Your currently selected backend, 'Agg' does not support show().
Please select a GUI backend in your matplotlibrc file ('/Users/wlynch/.matplotlib/matplotlibrc') or with matplotlib.use()
(backend, matplotlib.matplotlib_fname()))

3
Welches hast du letztendlich benutzt? das MacOSX-Backend oder das GTKCairo-Backend?
Bill Lynch

2
Ich musste die Datei matplotlibrc hinzufügen, da sie nicht vorhanden war. Ich habe das MacOSX-Backend erfolgreich verwendet.
SargeATM

117

Ich hatte das gleiche Problem, sogar ich konnte sehen, wie ein neues Anwendungsfenster erstellt wurde und sofort verschwand.

Einfache Lösung - prüfen Sie einfach, ob Sie haben

plt.show()

nach der Handlung


1
Dies funktionierte bei mir mit dem gleichen Problem weiter pylab. Vielen Dank!
Patrick Cook

3
Dies funktionierte bei mir auch mit Pandas Plot und import matplotlib.pyplot as pltließ es dann und dann auftauchen. Es ist ein bisschen seltsam, aber es hat gut funktioniert!
Allan Karlson

1
Dies war die Lösung, um Diagramme in PyCharm 2018.1 (unter OSX) auch auf der Registerkarte "Wissenschaftlicher Modus" (SciView) anzuzeigen!
Neurozen

2
Der Grund dafür ist der interaktive und der nicht interaktive Modus. Wenn das Backend im nicht interaktiven Modus geöffnet wird, plt.show()ist es am Ende des Codeblocks erforderlich. Sie können den Status überprüfen, indem Sie plt.isinteractive()den Status mit plt.ion()undplt.ioff()
nphadke

1
Tu nicht so wie ich; verwechseln fig.show()mit plt.show().
T'n'E

47

Das hat bei mir funktioniert. Ich habe gerade den Import von Matplotlib geändert

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

2
Dies funktionierte auch für mich unter Mac OS X in einer virtuellen Umgebung
Camron_Godbout

Arbeitete auch für mich! Das pyplotsollte nach dem importiert werden .use!
ch271828n

Ich habe matplotlib.use("TkAgg")nach all den Importen festgelegt, und es funktioniert immer noch gut, daher denke ich nicht, dass die Reihenfolge hier wichtig ist.
Retif

Eine Korrektur zu meinem vorherigen Kommentar - funktioniert in solchen Versionen mit den neuesten matplotlib-Versionen, aber in älteren Versionen mussten Sie dies tatsächlich vor dem Import tun.
Retif

12

Wenn du es versuchst

plt.savefig('myfilename.png')

anstatt

plt.show()

speichert das das richtige Bild, das myfilename.pngim aktuellen Pfad benannt ist?


Außerdem: Dies legt nahe (für den Teil "Nicht angezeigt"), dass Sie möglicherweise eine matplotlibrc-Datei benötigen (zuerst danach suchen) und das Backend in tkAgg ändern müssen: newmediaandcapitalmarkets.org/component/content/article/… . Welche Python benutzt du?
ChristopheD

6

Nach der Handlung einfach hinzufügen -

plt.show()

Der Grund dafür ist der interaktive und der nicht interaktive Modus. Wenn das Backend im nicht interaktiven Modus geöffnet wird, plt.show()ist es am Ende des Codeblocks erforderlich. Sie können den Status überprüfen, indem Sie plt.isinteractive()den Status mit plt.ion()und aufrufen und umschaltenplt.ioff()


@nphadke - Verwendung plt.show()- Ich habe meine Handlung zu zeigen, dann versuchte ich vor meiner plt.legend(), ich habe plt.ion()- und entfernt plt.show(), und ich habe meine plt.isinteractive()zu drucken True, aber noch habe ich nicht mein Grundstück bekommen zu zeigen. Also, wo sollte man tun plt.ion(), um in den interaktiven Modus zu wechseln - wenn jemand nur überprüfen wollte, ob dies funktioniert oder nicht, ohne es zu verwenden plt.show()?
aspiring1

3

nur um eine Notiz hinzuzufügen,

Die matplotlibrc-Datei war auf meinem System nicht vorhanden und ich musste eine Kopie von der matplotlib-Website herunterladen. Zukünftige Benutzer müssen möglicherweise dasselbe tun.


3

Das hat bei mir funktioniert:

brew install pkg-config
brew link pkg-config
brew install pygtk
brew install freetype
brew install libpng

sudo ln -s /usr/local/Cellar/freetype/*/lib/pkgconfig/freetype2.pc /usr/local/lib/pkgconfig/freetype2.pc

git clone git@github.com:matplotlib/matplotlib.git
cd matplotlib
python setup.py build
python setup.py install

Verweise:

http://blog.caoyuan.me/2012/08/matplotlib-error-mac-os-x/ http://matplotlib.org/faq/installing_faq.html#install-from-git http: //www.tapir .caltech.edu / ~ dtsang / python.html


Dies in Kombination mit dem backend: tkAggEinfügen von ~ / .matplotlib / matplotlibrc funktionierte für mich
Collin

Danke vielmals! Nach all dem qualvollen Roaming in Google löste dies endlich das Problem für mich!
Hi15

2

Ich hatte nur Python 2.5 und wollte Python 2.6 nicht auf meinem Mac installieren. Daher habe ich ein anderes Verfahren verwendet, das im folgenden Link erwähnt wird, um dieses Problem zu lösen:

http://www.gtkforums.com/viewtopic.php?f=3&t=54928

Was man tatsächlich braucht, sind die folgenden Schritte:

1) Suchen Sie nach dem Verzeichnis "pygtk-2.0.pc" und suchen Sie es. Zum Beispiel befand sich meins im folgenden Verzeichnis:

/ opt / local / lib / pkgconfig

2) Hinzufügen der Pfadinformationen zur Umgebungsvariablen. Zum Beispiel:

PKG_CONFIG_PATH=/opt/local/lib/pkgconfig
export PKG_CONFIG_PATH

3) Laden Sie die Konfigurationsinformationsdatei "matplotlibrc" von der matplotlib-Website http://matplotlib.sourceforge.net/_static/matplotlibrc herunter

4) Ändern Sie das Backend in der Datei in MacOSX und speichern Sie es

5) Kopieren Sie die Datei in das Verzeichnis .matplotlib. Sie können das Verzeichnis in Python mit dem folgenden Befehl suchen:

import matplotlib
matplotlib.get_configdir()

2

Der Mac wird mit einem eigenen Python geliefert ( lesen Sie hier , was nicht der beste ist). Ich würde nur eine Neuinstallation von Python 3.7 oder so zusammen mit Anaconda vorschlagen und diese dann als Interpreter in PyCharm einführen. Alles wird gut funktionieren und Sie müssen keine Ad-hoc-Lösungen wie "Backend: MacOSX" oder so hinzufügen.


2

Ich möchte diese praktikable Lösung für mich teilen,

import matplotlib
import platform
if platform.system() == 'Darwin':
    matplotlib.use('MacOSX')

0

Gehen Sie wie folgt vor, wenn jemand Spyder verwendet.

1.) Starten Sie Spyder 2.3.5.2 über Anaconda Launcher. 2.) Gehen Sie zu Einstellungen -> IPython-Konsole -> Grafik -> Backend: geändert in "Automatisch". 3.) Wählen Sie "Übernehmen" und schließen Sie die Einstellungen. 3.) Starten Sie den IPython-Kernel neu 4.) Erstellen Sie einfache Grafiken wie


0

Als vorübergehende Umgehung kann man die Figur in einem .png / .jpg / .pdf speichern und diese Datei für den Moment verwenden.

## assuming price is out DataFrame that contains columns that we want to plot 
pdf_plot=price.plot().get_figure()  
pdf_plot.savefig('Stocks.pdf')

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.