Cómo trabajar con imágenes en Bokeh

En este artículo vamos a ver cómo trabajar con imágenes en Bokeh. 

Para esto, usaremos el glifo ImageURL . Este glifo representa imágenes que se cargan desde las URL dadas.

Sintaxis: ImageURL(‘url’, ‘x’, ‘y’, ‘w’, ‘h’, ‘ángulo’, ‘dilatar’)

Argumentos:

  • url: La url desde donde se deben recuperar las imágenes.
  • x = NumberSpec(predeterminado=campo(“x”), las coordenadas x para ubicar los anclajes de la imagen.
  • y = NumberSpec(predeterminado=campo(“y”), las coordenadas y para ubicar los anclajes de la imagen.
  • w = NullDistanceSpec, el ancho de la región de trazado que ocupará la imagen en el espacio de datos. El valor predeterminado es «Ninguno», en cuyo caso la imagen se mostrará en su tamaño de imagen real.
  • h = NullDistanceSpec, la altura de la región de trazado que ocupará la imagen en el espacio de datos. El valor predeterminado es «Ninguno», en cuyo caso la imagen se mostrará en su tamaño de imagen real (independientemente de las unidades especificadas aquí).
  • angle = AngleSpec(predeterminado=0), los ángulos con los que se rotarán las imágenes, medidos desde la horizontal.
  • global_alpha = Float(1.0), una opacidad general con la que se representa cada imagen.
  • dilate = Bool(False), Indica si se redondean siempre las ubicaciones de píxeles fraccionarios de manera que las imágenes sean más grandes. Esta configuración puede ser útil si los errores de redondeo de píxeles hacen que las imágenes tengan un espacio entre ellas, cuando deberían aparecer al ras.
  • ancla = Enum(Ancla), Qué posición de la imagen debe anclarse en las coordenadas `x`, `y`.
  • retry_attempts = Int(0), número de intentos de volver a intentar cargar las imágenes desde la URL especificada. El valor predeterminado es cero.
  • retry_timeout = Int(0), tiempo de espera (en ms) entre reintentos para cargar la imagen desde la URL especificada. El valor predeterminado es cero ms.

Ejemplo 1: Importación de imagen desde URL

En este ejemplo, cargamos la imagen desde la URL proporcionada y luego representamos la imagen en el gráfico. En este ejemplo, estamos cargando la imagen desde la web, que también se puede cargar localmente. Aquí, mostramos dos imágenes en el gráfico con diferentes valores de parámetros (como x, y, w, h, etc.). Puede observar la salida para comprender mejor.

Python

# importing numpy package and other libraries
import numpy as np
from bokeh.io import curdoc, show
from bokeh.models import ColumnDataSource, Grid, ImageURL, LinearAxis, Plot, Range1d
from bokeh.plotting import figure
  
# url to load image from
url = "https://media.geeksforgeeks.org/wp-content/\
uploads/20210829161730/logo.png"
  
N = 5
  
# creating columndatasource
source = ColumnDataSource(dict(
    url=[url]*N,
    x1=np.arange(N),
    y1=np.arange(N),
    w1=[35]*N,
    h1=[64]*N,
))
  
# creating x and y axis range
xdr = Range1d(start=-100, end=300)
ydr = Range1d(start=-100, end=300)
  
# creating a plot with above x and y axes range
plot = Plot(
    title=None, x_range=xdr, y_range=ydr,
  plot_width=400, plot_height=400,
    min_border=0, toolbar_location=None)
  
# loading the image using imageUrl
image = ImageURL(url=["https://media.geeksforgeeks.org/\
wp-content/uploads/20210829161730/logo.png"],
                 x=50, y=80, w=200, h=250, anchor="bottom_left")
image1 = ImageURL(url="url", x="x1", y="y1", w="w1",
                  h="h1", anchor="center")
  
# rendering the images to the plot
plot.add_glyph(source, image)
plot.add_glyph(source, image1)
  
xaxis = LinearAxis()
plot.add_layout(xaxis, 'below')
  
yaxis = LinearAxis()
plot.add_layout(yaxis, 'left')
  
# adding grid lines to the plot
plot.add_layout(Grid(dimension=0, ticker=xaxis.ticker,
                     grid_line_color='#00ff00'))
  
plot.add_layout(Grid(dimension=1, ticker=yaxis.ticker,
                     grid_line_color='#00ff00'))
  
# creates output file
curdoc().add_root(plot)
curdoc().theme = 'caliber'
  
# showing the plot on output file
show(plot)

Producción:

Explicación:

  • Estamos creando ColumnDataSource que proporciona datos a los glifos de nuestra trama. Bokeh tiene su propia estructura de datos llamada ColumnDataSource que se puede usar como entrada para cualquier objeto de Bokeh. Estamos creando los datos con arrays NumPy.
  • Ahora cree el rango x e y usando range1d que crea un rango en una dimensión escalar y luego asígnelo a xdr e ydr que usaremos mientras creamos la gráfica.
  • Luego creamos el gráfico con xdr e ydr como x_range e y_range y configuramos la altura y el ancho del gráfico como 400.
  • Luego estamos recuperando la imagen de la URL que declaramos antes al establecer los valores de todos los parámetros como se muestra en el código. Estamos usando dos imágenes aquí dando diferentes valores.
  • Ahora, renderizamos las imágenes a la trama.
  • A continuación, agregamos las líneas de la cuadrícula al gráfico usando la función Cuadrícula y le damos el color ‘verde’.
  • Luego, agregamos la trama al código de la aplicación curdoc que representa un nuevo documento y se envía a bokehJs para mostrárselo al usuario.

Ejemplo 2: Creación de un glifo circular

En este ejemplo, estamos creando una figura con un glifo circular y luego simplemente representando la imagen desde la URL dada usando el glifo ImageURL.

Python

# importing numpy package and other libraries
import numpy as np
from bokeh.io import curdoc, show
from bokeh.models import ColumnDataSource, Grid, ImageURL, LinearAxis, Plot, Range1d
from bokeh.plotting import figure
  
# create dict as basis for ColumnDataSource
data = {'x1': [10, 20, 30, 40, 50],
        'y1': [60, 70, 80, 90, 100]}
  
# create ColumnDataSource based on dict
source = ColumnDataSource(data=data)
  
# creating figure
p = figure(plot_height=500, plot_width=500)
p.circle(x="x1", y="y1", size=20, source=source)
  
# rendering the image using imageUrl
image = ImageURL(url=["https://media.geeksforgeeks.org/\
wp-content/uploads/20210902155548/imgurl2-200x112.jpg"],
                 x=80, y=100, w=50, h=40, anchor="center", 
                 retry_attempts=2)
  
# adding the images to the plot
p.add_glyph(source, image)
  
# creates output file
curdoc().add_root(p)
  
# showing the plot on output file
show(p)

 Producción:

Publicación traducida automáticamente

Artículo escrito por namaldesign y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *