2016-01-07 1 views
9

Например, вы можете построить изображение в Matplotlib, используя этот код:Как работать с изображениями в боке (Python)

%matplotlib inline 
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
img=mpimg.imread('image.png') 
plt.imshow(img) 

что-то подобное можно с Bokeh (0,10)? Заранее спасибо за вашу помощь.

+1

Не так прямо. Bokeh имеет «Image» (скалярные данные, цветную карту), «ImageRGBA» (необработанные данные RGBA) и «ImageURL» (изображения, загруженные по сети). Это обеспечило бы хороший запрос функции в треевом трее GitHub. – bigreddot

ответ

14

Вы можете использовать глиф ImageURL (image_url) для загрузки изображений локально или из Интернета.

from bokeh.plotting import figure, show, output_file 

output_file('image.html') 

p = figure(x_range=(0,1), y_range=(0,1)) 
p.image_url(url=['tree.png'], x=0, y=1) 
show(p) 

Image Example

Один Гоча - если вы график только изображение (и никакие другие данные), вы должны явно установить диапазоны сюжет.

Вот документацию:

http://bokeh.pydata.org/en/latest/docs/reference/models/glyphs.html#bokeh.models.glyphs.ImageURL

+2

Этот пример кода больше не работает с 0.12.5, я попытался отредактировать код примера, но он был дважды отклонен, вам нужно использовать следующий вызов для image_url: 'p.image_url (url = ['tree.png'], x = 0, y = 0, w = 1, h = 1, anchor = "bottom_left") ' – johnf

+0

пример не работает при использовании сервера bokeh. Он не может найти изображение (404) –

6

Ранее ответ был полезным. Однако мне нужен только вариант с изображением без какого-либо дополнительного объекта. Итак, добавив ответ для версии Bokeh 0.12.0 и удалив все решетки, оси и панель инструментов.

from bokeh.plotting import figure, curdoc 
from bokeh.models import ColumnDataSource, Range1d 

bosch_logo = "static/tree.jpg" 
logo_src = ColumnDataSource(dict(url = [bosch_logo])) 

page_logo = figure(plot_width = 500, plot_height = 500, title="") 
page_logo.toolbar.logo = None 
page_logo.toolbar_location = None 
page_logo.x_range=Range1d(start=0, end=1) 
page_logo.y_range=Range1d(start=0, end=1) 
page_logo.xaxis.visible = None 
page_logo.yaxis.visible = None 
page_logo.xgrid.grid_line_color = None 
page_logo.ygrid.grid_line_color = None 
page_logo.image_url(url='url', x=0.05, y = 0.85, h=0.7, w=0.9, source=logo_src) 
page_logo.outline_line_alpha = 0 
curdoc().add_root(page_logo) 
+1

'' figure'' - это функция удобства, которая возвращает экземпляр '' bokeh.models.Plot'' со всеми установленными на нем осей/сетками/инструментами. В качестве альтернативы вы можете создать экземпляр голого объекта '' Plot'' и добавить к нему изображение (избегайте всего вычитания) –

+0

@ Luke благодарит за комментарий, можно ли было бы разделить рабочий код. – Jayant

0

Выполнение этого примера с использованием боке-сервиса является более сложным. Я предлагаю рабочей директории установки правильно:

server_folder/ 
    +main.py 
    +static/ 
     +logo.png 

.. и запустить боке служить команду из каталога ВЫШЕ server_folder

bokeh serve server_folder --show 

Тогда этот код работает для меня

#main.py file 
from bokeh.plotting import figure, curdoc 
x_range = (-20,-10) # could be anything - e.g.(0,1) 
y_range = (20,30) 
p = figure(x_range=x_range, y_range=y_range) 
#img_path = 'https://bokeh.pydata.org/en/latest/_static/images/logo.png' 
img_path = 'server_folder/static/logo.png' 
p.image_url(url=[img_path],x=x_range[0],y=y_range[1],w=x_range[1]-x_range[0],h=y_range[1]-y_range[0]) 
doc = curdoc() 
doc.add_root(p) 

enter image description here