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.

Dash no muestra la figura creada con px.imshow

Como se indica en el título, Dash no muestra una figura (imagen) creada con px.imshow. A continuación se muestra mi código.

import plotly.graph_objects as go # o plotly.express as px
import plotly.express as px
import numpy as np
import dash
import dash_core_components as dcc
import dash_html_components as html

img_rgb = np.array([[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
                    [[0, 255, 0], [0, 0, 255], [255, 0, 0]]
                   ], dtype=np.uint8)
fig = px.imshow(img_rgb)

app = dash.Dash()

app.layout = html.Div([
    dcc.Graph(figure=fig)
])
app.run_server(debug=True)

He utilizado esta página de documentación (https://plotly.com/python/imshow/). En la parte inferior, dice lo siguiente:

En todas las partes de esta página donde veas fig.show(), puedes mostrar la misma figura en una aplicación Dash pasándola como argumento de figura al componente Graph del paquete integrado dash_core_components de esta manera:

import plotly.graph_objects as go # o plotly.express as px
fig = go.Figure() # o cualquier función de Plotly Express, por ejemplo, px.bar(...)

fig.add_trace( ... )

fig.update_layout( ... )

import dash
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash()
app.layout = html.Div([
    dcc.Graph(figure=fig)
])

app.run_server(debug=True, use_reloader=False)  # Desactiva el recargador si estás en Jupyter

Entonces, ¿qué estoy haciendo mal?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Un problema posible es que los datos de la imagen pasados a px.imshow() están en tipo de datos uint8. Este tipo de datos no es compatible con los gráficos de Plotly, incluido Dash. Para mostrar la imagen correctamente, el tipo de datos debe convertirse a float32. Aquí está el código modificado:

    import plotly.express as px
    import numpy as np
    import dash
    import dash_core_components as dcc
    import dash_html_components as html
    
    img_rgb = np.array([[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
                        [[0, 255, 0], [0, 0, 255], [255, 0, 0]]
                       ], dtype=np.uint8)
    
    # Convertir uint8 a float32
    img_rgb_float = img_rgb.astype(np.float32) / 255.
    
    fig = px.imshow(img_rgb_float)
    
    app = dash.Dash()
    
    app.layout = html.Div([
        dcc.Graph(figure=fig)
    ])
    
    app.run_server(debug=True)
    

    Otro posible problema podría ser la compatibilidad de versiones entre Plotly y Dash. Ambas bibliotecas deben actualizarse a las versiones más recientes para garantizar la compatibilidad.

Comments are closed.