Nessuna finestra di trama in matplotlib


92

Ho appena installato matplotlib in Ubuntu 9.10 utilizzando il sistema di pacchetti Synaptic. Tuttavia, quando provo il seguente semplice esempio

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

Non ho una finestra di trama. Qualche idea su come mostrare la finestra della trama?


8
pylab non mostra il grafico per impostazione predefinita, poiché il disegno e l'aggiornamento costante possono essere costosi. Devi fare un esplicito show().
Alok Singhal,

1
Qualche documentazione ufficiale su questo problema: matplotlib.org/faq/…
stephenbez

Risposte:


143

Puoi digitare

import pylab
pylab.show()

o meglio, usa ipython -pylab.


Poiché l'uso di pylab non è più consigliato , la soluzione sarebbe oggi

import matplotlib.pyplot as plt

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

plt.show()

38

pylab.show() funziona ma blocca (è necessario chiudere la finestra).

Una soluzione molto più conveniente è fare pylab.ion()(modalità interattiva attivata) all'avvio: tutti i comandi (gli equivalenti di pylab) pyplot.*visualizzano immediatamente il loro grafico . Maggiori informazioni sulla modalità interattiva sono disponibili sul sito web ufficiale.

In secondo luogo uso anche l'ancor più conveniente ipython -pylab( --pylab, nelle versioni più recenti), che ti consente di saltare la from … import …parte ( %pylabfunziona anche nelle versioni più recenti di IPython).


1
ma devi pylab.show()prima chiamare anche per aprire una figura.
Steve Tjoa

3
@ Steve: la mia esperienza è che questo dipende fortemente dal backend. Su Mac OS X con la normale shell Python, non devo fare show () (o draw (), se è per questo): plot () apre una nuova finestra.
Eric O Lebigot

1
Ah ok. Buon punto. Ho solo esperienza con ipython in Linux.
Steve Tjoa

draw () non funziona per me, ma pylab.ion () funziona. Sto usando OSx
user1506145

Stessa cosa qui nella shell Python con l'ultimo Matplotlib. Ho aggiornato la mia risposta, grazie.
Eric O Lebigot

17

Prova questo:

import matplotlib
matplotlib.use('TkAgg') 

PRIMA di importare pylab


11

Lo snippet di codice seguente funziona sia su Eclipse che sulla 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()

Come molte altre risposte chiariscono, questo potrebbe funzionare per te al momento, ma tutto dipende da come è configurato il tuo backend matplotlib.
nealmcb

9

Vengono visualizzati errori? Questo potrebbe essere un problema per non aver impostato il backend. Puoi impostarlo dall'interprete Python o da un file di configurazione ( .matplotlib/matplotlibrc) nella tua home directory.

Per impostare il backend in codice puoi fare

import matplotlib
matplotlib.use('Agg')

dove "Agg" è il nome del backend. I backend presenti dipendono dall'installazione e dal sistema operativo.

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

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


1
Funziona completamente, grazie. Per essere chiari, la cosa più semplice da fare (una volta che sai che funziona ovviamente) è impostare il tuo backend .matplotlib/matplotlibrcsu backend: Agg. Quindi non devi farlo esplicitamente useogni volta :)
dsummersl

2

Il moderno IPython utilizza l' --matplotlibargomento " " con un parametro di backend opzionale. Il valore predefinito è "auto", che di solito è abbastanza buono su Mac e Windows. Non l'ho testato su Ubuntu o qualsiasi altra distribuzione Linux, ma mi aspetto che funzioni.

ipython --matplotlib

0

Se si verifica un problema in cui si pylab.show()blocca la finestra di IPython (potrebbe essere specifico di Mac OS X; non sono sicuro), è possibile cmd-c nella finestra di IPython, passare alla finestra del grafico e si interromperà.

Apparentemente, le future chiamate a pylab.show()non bloccheranno la finestra di IPython, solo la prima chiamata. Sfortunatamente, ho scoperto che il comportamento della finestra di trama / interazioni con show () cambia ogni volta che reinstallo matplotlib, quindi questa soluzione potrebbe non essere sempre valida.


0

Se stai avviando IPython con l' --pylabopzione, non dovresti aver bisogno di chiamare show()o draw(). Prova questo:

ipython  --pylab=inline

0

--pylabnon lavora più per Jupyter , ma per fortuna siamo in grado di aggiungere un tweak nel ipython_config.pyfile per ottenere sia pylabcosì come autoreloadfunzionalità.

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

0

Se sei un utente di Anaconda e Spyder, la soluzione migliore per te è questa:

Strumenti -> Preferenze -> Console Ipython -> Sezione grafica

Quindi nella sezione Supporto per la grafica (Matplotlib) :

selezionare due opzioni disponibili

e nel backend grafico :

selezionare Automatico


-5

Un'altra possibilità quando si utilizza easy_install è che è necessario richiedere la versione più recente di matplotlib. Provare:

import pkg_resources
pkg_resources.require("matplotlib")

prima di importare matplotlib o uno dei suoi moduli.


2
Questo assicura solo che matplotlibsia installato, non influisce sul modo in cui viene eseguita la gestione delle finestre.
tacaswell
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.