2016-07-19 10 views
1

Ich verwende Zeppelin und Matplotlib, um einige Daten zu visualisieren. Ich versuche sie, scheitere aber mit dem Fehler unten. Kannst du mir eine Anleitung geben, wie ich das beheben kann?Matplotlib kann nicht mit Apache Zeppelin ausgeführt werden

%pyspark 
import matplotlib.pyplot as plt 
plt.plot([1,2,3,4]) 
plt.ylabel('some numbers') 
plt.show() 

Und hier ist der Fehler, den ich

Traceback (most recent call last): 
    File "/tmp/zeppelin_pyspark-3580576524078731606.py", line 235, in <module> 
    eval(compiledCode) 
    File "<string>", line 1, in <module> 
    File "/usr/lib64/python2.6/site-packages/matplotlib/pyplot.py", line 78, in <module> 
    new_figure_manager, draw_if_interactive, show = pylab_setup() 
    File "/usr/lib64/python2.6/site-packages/matplotlib/backends/__init__.py", line 25, in pylab_setup 
    globals(),locals(),[backend_name]) 
    File "/usr/lib64/python2.6/site-packages/matplotlib/backends/backend_gtkagg.py", line 10, in <module> 
    from matplotlib.backends.backend_gtk import gtk, FigureManagerGTK, FigureCanvasGTK,\ 
    File "/usr/lib64/python2.6/site-packages/matplotlib/backends/backend_gtk.py", line 8, in <module> 
    import gtk; gdk = gtk.gdk 
    File "/usr/lib64/python2.6/site-packages/gtk-2.0/gtk/__init__.py", line 64, in <module> 
    _init() 
    File "/usr/lib64/python2.6/site-packages/gtk-2.0/gtk/__init__.py", line 52, in _init 
    _gtk.init_check() 
RuntimeError: could not open display 

habe ich auch versuchen, diese Zeilen zu schreiben, kann aber immer noch nicht funktioniert

import matplotlib 
matplotlib.use('Agg') 

Antwort

6

folgende Arbeiten für mich mit Funken & Python 3:

%pyspark 

import matplotlib 
import io 

# If you use the use() function, this must be done before importing matplotlib.pyplot. Calling use() after pyplot has been imported will have no effect. 
# see: http://matplotlib.org/faq/usage_faq.html#what-is-a-backend 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 

def show(p): 
    img = io.StringIO() 
    p.savefig(img, format='svg') 
    img.seek(0) 
    print("%html <div style='width:600px'>" + img.getvalue() + "</div>") 

plt.plot([1,2,3,4]) 
plt.ylabel('some numbers') 
show(plt) 

Der Zeppelin documentation schlägt vor, dass die folgenden sollte funktionieren:

%python 
import matplotlib.pyplot as plt 
plt.figure() 
(.. ..) 
z.show(plt) 
plt.close() 

Das ist nicht für mich 3 mit Python funktioniert, sieht aber mit der angegangen werden PR #1213 soon-to-be-fusionierte.

+0

arbeitete es mit python2.7 auf Ubuntu funktioniert. Nach 'sudo apt-get installieren python-matplotlib' –

+0

Danke Jungs, ich weiß, was passiert mit meinem Cluster, weil ich Python 2.6 benutze. Alles, was ich tun muss, ist mein Python auf 2.7 zu aktualisieren – hminle

0

Per @eddies Vorschlag habe ich versucht, und das ist, was für mich auf Zeppelin 0.6.1 Python 2,7

%python 
import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 
plt.figure() 
plt.plot([1,2,3,4]) 
plt.ylabel('some numbers') 
z.show(plt, width='500px') 
plt.close()