2011-02-08 19 views
143

के बिना matplotlib ग्राफ उत्पन्न करना Matplotlib को $ DISPLAY पर्यावरण चर की आवश्यकता होती है जिसका अर्थ है एक चल रहा एक्स सर्वर।
कुछ वेब होस्टिंग सेवाएं चल रहे एक्स सर्वर सत्र की अनुमति नहीं देती हैं।
क्या चल रहा एक्स सर्वर के बिना matplotlib का उपयोग कर ग्राफ उत्पन्न करने का कोई तरीका है?चल रहे एक्स सर्वर

[[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 
>>> 

उत्तर

260

@ नील का जवाब एक (! पूरी तरह से वैध) यह ऐसा करने का तरीका है, लेकिन आप भी simply call matplotlib.use('Agg')before importing matplotlib.pyplot, और उसके बाद के रूप में सामान्य जारी रख सकते हैं।

उदा।

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') 

आप Agg बैकएंड का उपयोग करने के साथ ही नहीं है। pdf, ps, svg, agg, cairo, and gdk backends का उपयोग एक्स-सर्वर के बिना किया जा सकता है। हालांकि, केवल एजीजी बैकएंड डिफ़ॉल्ट रूप से बनाया जाएगा (मुझे लगता है?), इसलिए एक अच्छा मौका है कि अन्य बैकएंड आपके विशेष इंस्टॉल पर सक्षम नहीं हो सकते हैं।

वैकल्पिक रूप से, आप .matplotlibrc फ़ाइल में बैकएंड पैरामीटर सेट कर सकते हैं ताकि स्वचालित रूप से matplotlib.pyplot दिए गए रेंडरर का उपयोग कर सकें।

+0

यह मुझे पागल लगता है कि आपको दो बार matplotlib आयात करना होगा। क्या कोई आसान तरीका है? –

+9

इसके लायक होने के लिए, आप वास्तव में matplotlib को दो बार आयात नहीं कर रहे हैं। आप matplotlib आयात कर रहे हैं और उसके बाद एक उप-मॉड्यूल आयात कर रहे हैं जो स्वचालित रूप से आयात नहीं होता है। अन्य तरीके हैं, हां (उदाहरण के लिए, अपनी '.maplotlibrc' फ़ाइल बदलें), कि यह सबसे सीधा-आगे वाला है। –

+0

क्या होगा यदि मैंने पहले ही पाइपप्लॉट आयात किया है? क्या मैं अभी भी कर सकता हूँ? –

18

आपको पिलैब इंटरफ़ेस के माध्यम से सीधे matplotlib API का उपयोग करने की आवश्यकता है। वहाँ एक अच्छा उदाहरण यहाँ है:

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

+1

मैं 'एसएसएच 'और' स्क्रीन 'के साथ काम कर रहा हूं और' matplotlib.use ('agg') 'सुझाव के अलावा यह एकमात्र समाधान था जो काम करता था। योगदान – user3085931

+0

@ user3085931 के लिए धन्यवाद: यह जानने के लिए अच्छा है कि मेरे उत्तर को लिखने के 5 साल बाद किसी के लिए अभी भी उपयोगी है! मुझे बताने के लिए धन्यवाद। –

संबंधित मुद्दे