2017-02-01 6 views
4

Я пишу отчет, чьи сюжеты все отображаются Matplotlib. Я установил Matplotlib по умолчанию, чтобы все сюжеты имели один и тот же стиль.Как установить стиль по умолчанию в Bokeh?

Тем не менее, мне нужно использовать Bokeh, так как он обеспечивает поддержку для рендеринга легенд для Datashader - библиотека, созданная людьми на Bokeh.

Моя проблема в том, что стиль по умолчанию Bokeh очень отличается от моего пользовательского стиля. Вместо того, чтобы менять каждый отдельный атрибут на моем участке Bokeh, можно ли было бы Bokeh считать из таблицы стилей так же, как Matplotlib делает с plt.use.style(['ggplot'])?

ответ

2

Начиная с Bokeh 0.12.4 по-прежнему остаются открытые проблемы (функции для разработки, а также несколько ошибок и дополнительная поддержка документации) вокруг theming в Bokeh. То, что в настоящее время поддерживается, основано на типе, используя объект Theme, который можно установить в текущем документе.

Объект Theme берет блок JSON, в общем виде:

{ 
    'attrs: { 
     'SomeTypeName': { 'foo_property': default_foo }, 
     'OtherTypeName': { 'bar_property': default_bar } 
    } 
} 

Или для конкретного примера:

from bokeh.io import curdoc 
from bokeh.themes import Theme 

curdoc().theme = Theme(json={'attrs': { 

    # apply defaults to Figure properties 
    'Figure': { 
     'toolbar_location': None, 
     'outline_line_color': None, 
     'min_border_right': 10, 
    }, 

    # apply defaults to Axis properties 
    'Axis': { 
     'major_tick_in': None, 
     'minor_tick_out': None, 
     'minor_tick_in': None, 
     'axis_line_color': '#CAC6B6', 
     'major_tick_line_color': '#CAC6B6', 
    }, 

    # apply defaults to Legend properties 
    'Legend': { 
     'background_fill_alpha': 0.8, 
    } 
}}) 

Этот JSON можно также прочитать из файла, используя стандартный Python JSON инструменты.

Если это также происходит в контексте серверного приложения (типа каталога) Bokeh, вы также можете указать тему как файл theme.yaml в том же каталоге, что и ваш main.py. См., Например, Gapminder example.

+0

Спасибо, @bigreddot эта информация была очень полезной, и я буду продолжать ссылаться на нее в будущем. «Боке» - многообещающая библиотека. Тем не менее, я узнал, что Bokeh не позволит мне сохранять изображение как «png» программным путем, поэтому, к сожалению, мне пришлось отказаться от отличной библиотеки Datashader. Вместо этого я решил адаптировать 'eq_hist' к конвейеру matplotlib. – gzagatti

+0

Не понимаю. Datashader не требует Bokeh, и Datashader сам по себе может абсолютно генерировать изображения. Фактически, это * все * он делает: Datashader * только * производит изображения. Интерактивная интеграция с Bokeh просто использует Bokeh для отображения изображений в браузере и позволяет сообщать о взаимодействии (например, панорамирование и масштабирование), чтобы можно было создавать новые изображения. Bokeh не может сохранять изображения (пока), но вы можете использовать Datashader самостоятельно для сохранения изображений. FWIW также есть интеграция MPL + Datashader. – bigreddot

+0

Спасибо за отзыв. Я не знал о интеграции «MPL + Datashader». Но то, что мне действительно нужно от «Datashader», было умение создавать легенды. Я не мог найти эту функциональность, и мой поиск привел к [этому] (https://github.com/bokeh/datashader/blob/master/examples/legends.ipynb), который использует 'Bokeh' для создания дискретизированных легенд, и именно поэтому Я начал использовать 'Bokeh'. – gzagatti

 Смежные вопросы

  • Нет связанных вопросов^_^