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.