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.

Plotly v5.3.1 combinó el histograma de conteo y la curva KDE

Actualmente tengo este código:

import dash_core_components as dcc #versión de dash 2.0.0
import plotly.figure_factory as ff #versión de plotly 5.3.1

...código de la aplicación dash

dcc.Graph(id = 'rug_plot_count_region_biosynthetic_protein_homologs',
          figure = ff.create_distplot([filtered_df['count_region_biosynthetic_protein_homologs'].tolist()], 
                                      group_labels = ['count_region_biosynthetic_protein_homologs'])),

...más código de la aplicación dash

Lo cual produce esta figura como parte de una aplicación dash:

plotly distplot

Me gustaría tener dos ejes y, uno mostrando la densidad de probabilidad para la curva KDE (que es el eje y ya presente) y otro mostrando la frecuencia de conteo. Luego me gustaría que la curva KDE esté conectada al eje y KDE y que el histograma esté conectado al eje y de conteo.

¿Hay alguna manera de hacer esto usando plotly?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible agregar un segundo eje y en plotly y vincularlo a una traza diferente. En este caso, podemos crear dos trazas separadas para el histograma y la curva KDE y asignarlas a diferentes ejes y.

    Aquí hay una modificación de ejemplo del código:

    import dash_core_components as dcc
    import plotly.graph_objects as go
    import plotly.figure_factory as ff
    import numpy as np
    
    # generar algunos datos de muestra
    np.random.seed(42)
    data_hist = np.random.normal(0, 1, 1000)
    
    # crear traza de histograma para datos de conteo
    trace_hist = go.Histogram(x=data_hist, nbinsx=20)
    
    # crear traza de KDE para datos de densidad
    trace_kde = ff.create_distplot([data_hist], show_hist=False)[0]
    
    # agregar segundo eje y para la curva KDE
    fig = go.Figure(data=[trace_hist, trace_kde])
    fig.update_layout(yaxis=dict(title='Conteo'), yaxis2=dict(title='Densidad', overlaying='y', side='right'))
    
    # crear aplicación dash con figura actualizada
    app = dash.Dash(__name__)
    app.layout = html.Div([
        dcc.Graph(id='rug_plot_count_region_biosynthetic_protein_homologs', figure=fig),
        # agregar más componentes de dash aquí según sea necesario
    ])
    

    En este ejemplo, primero generamos algunos datos de muestra para fines de demostración. Luego creamos dos trazas separadas: trace_hist para el histograma y trace_kde para la curva KDE. Es importante destacar que en trace_kde, establecemos show_hist=False para ocultar el histograma superpuesto.

    Luego creamos un nuevo objeto go.Figure y agregamos ambas trazas. Para agregar un segundo eje y para la curva KDE, establecemos overlaying='y' y side='right' para yaxis2. Finalmente, actualizamos el diseño de la figura y se lo pasamos al componente dcc.Graph en la aplicación dash.

    Con estas modificaciones, la figura resultante debería tener dos ejes y con la curva KDE vinculada al eje y de densidad y el histograma vinculado al eje y de conteo.

Comments are closed.