es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tooltips de Bokeh con espacios o caracteres especiales en el nombre

Mi gráfico muestra “???” cuando tengo espacios o caracteres especiales en el nombre de la columna.
Aquí está mi código:

from bokeh.plotting import figure, show, ColumnDataSource
import pandas as pd

# preparar algunos datos
xx = [1, 2, 3, 4, 5]
yy = [4, 5, 5, 7, 2]
df_xy = pd.DataFrame(list(zip(xx, yy)), columns=['nombre con espacio', 'y_y:y'])
#df_xy = pd.DataFrame(list(zip(xx, yy)), columns=['nombre', 'y'])
source = ColumnDataSource(df_xy)

pp = figure(y_range=(0, 10), sizing_mode="stretch_width", max_width=500, height=250,
    tooltips="@nombre con espacio tiene el valor @y_y:y")
#    tooltips="@nombre tiene el valor @y")

pp.circle(source.column_names[1], source.column_names[2], size=10, source=source)
pp.line(source.column_names[1], source.column_names[2], line_width=2, source=source)

# mostrar los resultados
show(pp)

El dataframe se ve así:

   nombre con espacio  y_y:y
0                   1      4
1                   2      5
2                   3      5
3                   4      7
4                   5      2

Cuando cambio el nombre de la columna por uno regular (sin espacios, sin caracteres especiales), funciona.

¿Cómo puedo lograr que funcione?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Bokeh presenta problemas con los nombres de columna que contienen espacios o caracteres especiales, por lo que, para que funcione, es necesario reemplazar los nombres de columna por otros válidos. Una forma de hacerlo es utilizar el método rename() de pandas para reemplazar los espacios y caracteres especiales por guiones bajos:

    df_xy = df_xy.rename(columns=lambda x: x.replace(' ', '_').replace(':', '_'))
    

    Luego, puedes actualizar tus tooltips y funciones de trazado para utilizar los nuevos nombres de columna:

    pp = figure(y_range=(0, 10), sizing_mode="stretch_width", max_width=500, height=250,
            tooltips="@name_with_space tiene el valor @y_y_y")
    pp.circle('name_with_space', 'y_y_y', size=10, source=source)
    pp.line('name_with_space', 'y_y_y', line_width=2, source=source)
    

    Esto debería solucionar el problema y permitirte mostrar el gráfico con tooltips utilizando los nombres de columna modificados.

Comments are closed.