Не удается запустить Matplotlib с Apache Zeppelin

python matplotlib apache-zeppelin

5800 просмотра

5 ответа

176 Репутация автора

Я использую Zeppelin и matplotlib для визуализации некоторых данных. Я пробую их, но не с ошибкой ниже. Не могли бы вы дать мне несколько советов, как это исправить?

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

И вот ошибка у меня

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

Я также пытаюсь добавить эти строки, но все еще не может работать

import matplotlib
matplotlib.use('Agg')
Автор: hminle Источник Размещён: 19.07.2016 07:16

Ответы (5)


7 плюса

3465 Репутация автора

Следующее работает для меня с Spark & ​​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)

Цеппелин документация предполагает , что следующее должно работать:

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

Это не работает для меня с Python 3, но, похоже, решит проблему с будущим объединением PR # 1213 .

Автор: eddies Размещён: 25.07.2016 09:57

0 плюса

866 Репутация автора

Согласно предложению @eddies, я попробовал, и это то, что у меня сработало на Python 2.7 Zeppelin 0.6.1.

%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()
Автор: Pramit Размещён: 01.11.2016 10:19

4 плюса

1159 Репутация автора

Обратите внимание, что в Zeppelin 0.7.3 интеграция с matplotlib стала намного более плавной, поэтому описанные здесь методы больше не нужны. https://zeppelin.apache.org/docs/latest/interpreter/python.html#matplotlib-integration

Автор: PriceHardman Размещён: 12.05.2018 04:30

0 плюса

111 Репутация автора

Изменить это:

import matplotlib
matplotlib.use('Agg')

с участием

import matplotlib.pyplot as plt; plt.rcdefaults()
plt.switch_backend('agg')

Полный пример кода Spark 2.2.0 + python3 (anaconda3.5):

%spark.pyspark

import matplotlib.pyplot as plt; plt.rcdefaults()
plt.switch_backend('agg')
import numpy as np
import io

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

# Example data
people=('Tom', 'Dick', 'Harry', 'Slim', 'Jim')
y_pos=np.arange(len(people))
performance=3 + 10 * np.random.rand(len(people))
error=np.random.rand(len(people))

plt.barh(y_pos, performance, xerr=error, align='center', alpha=0.4)
plt.yticks(y_pos, people)
plt.xlabel('Performance')
plt.title('How fast do you want to go today?')

show(plt)
Автор: BorderStark Размещён: 12.06.2018 10:28

0 плюса

7702 Репутация автора

Я бы предложил вам использовать интерпретатор IPython / IPySpark в zeppelin 0.8.0, который скоро будет выпущен. Интеграция matplotlib в ipython почти такая же, как и в jupyter. Есть один учебник https://www.zepl.com/viewer/notebooks/bm90ZTovL3pqZmZkdS9lN2Q3ODNiODRkNjA0ZjVjODM1OWZlMWExZjM4OTk3Zi9ub3RlLmpzb24

Автор: zjffdu Размещён: 12.06.2018 11:28
Вопросы из категории :
32x32