Изменить расширение holoviews на одном участке

Обычно я использую bokeh бэкэнд, но я хочу иметь возможность рисовать поверхности, что поддерживается matplotlib бэкэндом, но не bokeh. Есть ли способ указать, что конкретный график должен отображаться с использованием другого бэкэнда, не меняя бэкэнд, используемый для последующих графиков? Я мог бы сделать следующее, например в записной книжке Jupyter:

import holoviews as hv
hv.extension("bokeh")

# plots involving bokeh backend
surface = hv.Surface(np.sin(np.linspace(0,100*np.pi*2,10000)).reshape(100,100))
hv.extension("matplotlib")
surface
hv.extension("bokeh")
# more plots involving bokeh

Но это довольно неудобно. Есть ли что-нибудь, что я мог бы сделать, как

surface = surface.opts(extension="matplotlib")

чтобы этот элемент отображался с помощью matplotlib, но это не повлияло на отображение других графиков?


person Nathan    schedule 17.01.2019    source источник


Ответы (1)


Если вы используете holoviews> = 1.11.0, вы можете использовать утилиту hv.output. Сначала убедитесь, что загружены оба бэкенда:

import holoviews as hv
hv.extension("bokeh", "matplotlib")
... # Various plots using bokeh

Теперь вы можете использовать утилиту output для отображения одного графика с помощью matplotlib (или plotly):

surface = hv.Surface(np.sin(np.linspace(0,100*np.pi*2,10000)).reshape(100,100))
hv.output(surface, backend='matplotlib')

Если вам также необходимо предоставить настраиваемые параметры для другого бэкэнда, вы можете указать бэкэнд как часть .opts (или .options объявления):

hv.output(surface.opts(fig_size=200, backend='matplotlib'), backend='matplotlib')
person philippjfr    schedule 17.01.2019