2016-01-07 13 views
9

Per esempio è possibile tracciare un'immagine in matplotlib utilizzando questo codice:Come faccio a lavorare con le immagini in bokeh (Python)

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

è qualcosa di simile possibile con Bokeh (0,10)? Grazie in anticipo per il vostro aiuto.

+1

Non direttamente in questo modo. Bokeh ha 'Immagine' (dati scalari, mappa dei colori),' ImageRGBA' (dati RGBA grezzi) e 'ImageURL' (immagini caricate sulla rete). Questo farebbe una buona richiesta di funzionalità sul tracker dei problemi di GitHub. – bigreddot

risposta

14

È possibile utilizzare il glifo ImageURL (metodo di stampa image_url) per caricare immagini localmente o dal Web.

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

One Gotcha - Se si rappresentano solo un'immagine (e non altri dati), si dovrà impostare in modo esplicito la trama varia.

Ecco la documentazione:

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

+2

Questo codice di esempio non funziona più su 0.12.5, ho provato a modificare il codice di esempio ma è stato rifiutato due volte, è necessario utilizzare la seguente chiamata a image_url: 'p.image_url (url = ['tree.png'], x = 0, y = 0, w = 1, h = 1, anchor = "bottom_left") ' – johnf

+0

l'esempio non funziona quando si utilizza il server bokeh. Non è in grado di trovare l'immagine (404) –

6

La risposta in precedenza era disponibile. Tuttavia, volevo un'opzione solo immagine senza alcun oggetto aggiuntivo. Quindi, aggiungendo la risposta per la versione di Bokeh 0.12.0 e rimosse tutte le griglie, gli assi e la barra degli strumenti.

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'' è una funzione utile che restituisce un'istanza '' bokeh.models.Plot'' con tutti gli assi/griglie/strumenti impostati su di essa. In alternativa, è possibile creare un'istanza di un oggetto '' Plot'' e aggiungere l'immagine (evitando tutte le risorse di sottrazione) –

+0

@Luke grazie per il commento, sarebbe possibile condividere un codice funzionante. – Jayant

0

L'esecuzione di questo esempio utilizzando bokeh serve è un po 'più complicato. Suggerisco di directory di lavoro configurato correttamente:

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

.. ed eseguire bokeh servire comando dalla directory SOPRA Cartella_server

bokeh serve server_folder --show 

Allora questo codice funziona per me

#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