Как преобразовать графики Bokeh в объект BytesIO для кодирования графика с помощью модуля base64 - PullRequest
0 голосов
/ 23 января 2019

У меня есть plot объект bokeh, где я строю sin(x) кривую.

from math import *
from io import BytesIO
from bokeh.plotting import (figure, output_file, show)
from bokeh.io import (export_png, export_svgs)

import base64
import numpy as np

plot = figure(plot_width=1000, plot_height=500)

x = np.linspace(-2*np.pi, 2*np.pi, 1000)
y = np.array([sin(i) for i in x])

plot.line(x, y, line_width=1)

Теперь вместо сохранения его в каком-то файле html с некоторым именем, output_file('sine.html')Я хочу создать объект BytesIO(), чтобы в дальнейшем можно было кодировать base64.

Мне любезно нужна помощь сообщества.

Причина, по которой я желаю, заключается в matplotlib Я могуэкспортируйте изображение как BytesIO() объект и плавно работайте с ним, отрисовывая его обратно в Flask или Dash приложении, например,

figfile = BytesIO()
plt.savefig(figfile, format='png')
plt.clf()
figfile.seek(0)
figdata_png = base64.b64encode(figfile.getvalue())
return figdata_png.decode('UTF-8')

, и я хочу такую ​​же применимость с bokeh.

Пожалуйста, ведите меня с этим.

1 Ответ

0 голосов
/ 16 апреля 2019

Bokeh предоставляет эту функцию в bokeh.io.export.get_screenshot_as_png:

from bokeh.io.export import get_screenshot_as_png

img = get_screenshot_as_png(plot)

img - это экземпляр изображения PIL, который содержит изображение.

Вне темы:Это также можно использовать для отображения графика в формате PNG в JupyterLab.Просто позвоните get_screenshot_as_png(plot) и все готово.

...