Par exemple, vous pouvez tracer une image dans matplotlib en utilisant ce code:
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img=mpimg.imread('image.png')
plt.imshow(img)
Est-ce que quelque chose comme ça est possible avec Bokeh (0.10)?
Vous pouvez utiliser le glyphe ImageURL
(image_url
méthode plot) pour charger des images localement ou à partir du 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, w=0.8, h=0.6)
## could also leave out keywords
# p.image_url(['tree.png'], 0, 1, 0.8, h=0.6)
show(p)
One gotcha - si vous ne représentez qu'une image (et aucune autre donnée), vous devrez définir explicitement les plages de tracé.
Voici les documents:
http://docs.bokeh.org/en/latest/docs/reference/models/glyphs.html#bokeh.models.glyphs.ImageURL
La réponse précédente était utile. Cependant, je voulais une option d'image uniquement sans objet supplémentaire. Ainsi, l'ajout de la réponse pour Bokeh version 0.12.0 et la suppression de toutes les grilles, axes et barre d'outils.
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)
L'exécution de cet exemple à l'aide du service bokeh est un peu plus délicate. Je suggère de configurer correctement le répertoire de travail:
server_folder/
+main.py
+static/
+logo.png
.. et exécutez la commande bokeh serve depuis le répertoire [~ # ~] ci-dessus [~ # ~] dossier_serveur
bokeh serve server_folder --show
Ensuite, ce code fonctionne pour moi
#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://docs.bokeh.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)
Une autre option consiste à afficher l'image dans un div .:
from bokeh.io import output_notebook, show
from bokeh.models.widgets import Div
output_notebook()
div_image = Div(text="""<img src="https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/7.png" alt="div_image">""", width=150, height=150)
show(div_image)
ImageURL ne peut pas être mis à jour dynamiquement avec un rappel . Cependant, en utilisant un div
, vous pouvez le faire en traitant le div_image.text
comme une chaîne régulière Python, par exemple:
from ipywidgets import interact
from bokeh.io import output_notebook, show, Push_notebook
from bokeh.models.widgets import Div
output_notebook()
div_image = Div(text="""<img src="https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png" alt="div_image">""", width=100, height=100)
def update(pokemon_number=1):
div_image.text = """<img src="https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/{}.png" alt="div_image">""".format(pokemon_number)
Push_notebook()
show(div_image, notebook_handle=True)
interact(update, pokemon_number=[1, 4, 7])
Bien sûr, la source d'image peut également pointer vers un fichier local.
(Testé dans Python 3.7.3 et bokeh 1.2.0)