Как разместить диаграмму боке в шаблоне Chameleon?

У меня есть проект со многими сценариями, использующими Matplotlib. Я хотел бы создать веб-интерфейс для этого проекта.

Как разместить диаграмму боке в шаблоне Chameleon? Я использую Pyramid и загрузчик Deform, если это имеет значение.

У кого-нибудь есть хороший пример?


person EnergyGeek    schedule 24.02.2014    source источник
comment
Вы используете статические графики или хотите встроить библиотеку Brokeh JS?   -  person Martijn Pieters    schedule 24.02.2014
comment
Я ищу что-то интерактивное. У меня есть куча кода, написанного для создания графиков с использованием Matplotlib. Я только что нашел этот jakevdp.github.io/blog /2014/01/10/d3-plugins-truly-interactive . Мне кажется, это лучший способ, поскольку мне не придется переписывать весь код с помощью matplotlib. В любом случае мне нужно понять, как внедрить диаграмму в шаблон Chameleon.   -  person EnergyGeek    schedule 24.02.2014


Ответы (2)


Здесь нужно решить несколько разных вопросов.

  1. Если вы действительно пытаетесь перенести множество графиков Matplotlib в интерактивный JS, то, возможно, проект mpld3 вам подойдет. Тем не менее, вы должны знать, что использование D3 будет влиять на производительность, в зависимости от того, сколько точек находится на вашем графике. Bokeh теперь также имеет базовую поддержку Matplotlib и будет только расширяться. Джейк в настоящее время реорганизует проект mpld3 в явный экспортер, а затем в средство визуализации D3, и мы также потенциально будем использовать эту работу для поддержки Bokeh Matplotlib.

  2. Чтобы сделать это с боке, вы можете получить необработанный HTML для сюжета, посмотрев, как, например. HTMLFileSession.dumps() реализовано: https://github.com/ContinuumIO/bokeh/blob/master/bokeh/session.py#L295. Шаблон по умолчанию — bokeh/templates/base.html; однако это полный файл HTML, а не фрагмент. Метод dumps() довольно прост, как и шаблон по умолчанию, поэтому вы сможете получить то, что вам нужно, просмотрев их. Надеюсь, к следующему релизу мы закончим HTMLFragmentSession, что облегчит встраивание.

person Peter Wang    schedule 25.02.2014
comment
Хорошо, похоже, мне нужно подождать, пока Боке станет более зрелым. Мне удалось заставить работать mpld3. Это было очень просто, и мне нужно было всего лишь отредактировать пару строк кода, чтобы отобразить исходные сценарии Matplotlib в браузере. Внедрить это в шаблон Chameleon было так же просто, как вызвать fig_to_d3(). Тем не менее, я работаю с минутными данными. Что бы вы предложили быстрее, чем D3? - person EnergyGeek; 25.02.2014

Вы хотите использовать plot.create_html_snippet. Эта функция возвращает код, который вы хотите отобразить в HTML, а также записывает файл для встраивания.

Так выглядит встроенный сниппет

<script src="http://localhost:5006/static/dc0c7cfd-e657-4c79-8150-6a66be4dccb8.embed.js" bokeh_plottype="embeddata" bokeh_modelid="dc0c7cfd-e657-4c79-8150-6a66be4dccb8" bokeh_modeltype="Plot" async="true"></script>

следующие аргументы управляют тем, как записывается файл для встраивания и где код js ищет файлы для встраивания. embed_base_url управляет URL-адресом (он может быть абсолютным или относительным), в котором javascript будет искать файл для встраивания.

embed_save_loc управляет каталогом, в который python будет записывать файл для встраивания. embed_save_loc не нужен, когда server=True

static_path controls URL-адрес (он может быть абсолютным или относительным), который javascript будет использовать для создания URL-адресов для bokeh.js и bokeh.css. По умолчанию он равен http://localhost:5006/static/, но с таким же успехом может указывать на CDN.

При запуске сервера боке перейдите к http://localhost:5006/bokeh/generate_embed/static . Я думаю, что это требует, чтобы вы работали на мастере из-за ошибки.

Надеюсь, это поможет.

person paddy    schedule 13.03.2014
comment
Спасибо за ответ. У меня пока работает mpld3. Пройдет некоторое время, прежде чем я вернусь к этой части моего приложения. Когда сделаю, обязательно попробую. - person EnergyGeek; 15.03.2014