2011-02-08 2 views
143

Matplotlib, çalışan bir X sunucusu anlamına gelen $ DISPLAY ortam değişkenini gerektiriyor gibi görünüyor.
Bazı web barındırma hizmetleri, çalışan bir X sunucusu oturumuna izin vermez.
Çalışan X sunucusu olmadan matplotlib kullanarak grafikler oluşturmanın bir yolu var mı?Çalışan bir X sunucusu olmadan matplotlib grafikleri oluşturma

[[email protected] ~]$ python2.6 
Python 2.6.5 (r265:79063, Nov 23 2010, 02:02:03) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import matplotlib.pyplot as plt 
>>> fig = plt.figure() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/pyplot.py", line 270, in figure 
    **kwargs) 
    File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/backends/backend_tkagg.py", line 80, in new_figure_manager 
    window = Tk.Tk() 
    File "/usr/local/lib/python2.6/lib-tk/Tkinter.py", line 1643, in __init__ 
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) 
_tkinter.TclError: no display name and no $DISPLAY environment variable 
>>> 

cevap

260

(! Tamamen geçerli) Bir bunu yapmanın yolu, ama aynı zamanda simply call matplotlib.use('Agg')before importing matplotlib.pyplot ve sonra normal olarak devam edebilir: Orada iyi bir örnek burada.

E.g.

import matplotlib as mpl 
mpl.use('Agg') 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot(range(10)) 
fig.savefig('temp.png') 

Siz de, Topak arka uç kullanmak zorunda değilsiniz. pdf, ps, svg, agg, cairo, and gdk backends hepsi bir X sunucusu olmaksızın kullanılabilir. Ancak, varsayılan olarak sadece Agg arka planı oluşturulacak (bence?), Bu yüzden diğer kurulumların sizin kurulumunuzda etkinleştirilmeyeceği iyi bir şans.

Alternatif olarak, .matplotlibrc dosyanızdaki arka uç parametresini, otomatik olarak matplotlib.pyplot belirtilen oluşturucuyu kullanacak şekilde ayarlayabilirsiniz.

+0

Matplotlib'i iki kez almanız gerektiğine delice geliyor. Daha kolay bir yolu var mı? –

+9

Değeri için aslında iki kez matplotlib almıyorsunuz. Matplotlib dosyasını içe aktarıyorsunuz ve daha sonra otomatik olarak içe aktarılmayan bir alt modülü içe aktarıyorsunuz. Başka yollar var, evet (örneğin, '.maplotlibrc 'dosyanızı değiştir), bu en açık olanıdır. –

+0

Ya zaten pyplot ithal ettiysem? hala yapabilir miyim? –

18

Matplotlib API'sini, pileb arabiriminden geçmek yerine doğrudan kullanmanız gerekir. Neil'in cevap @

http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html

+1

'ssh' ve' screen' ile çalışıyorum ve matplotlib.use ('Agg') 'önerisinin yanı sıra bu işe yarayan tek çözümdü. Katkı için teşekkürler – user3085931

+0

@ user3085931: Yanıt yazmamın 5 yıl sonra hala birisine yararlı olduğunu bilmek güzel! Bana bildirdiğiniz için teşekkürler. –