当前位置: 首页 > 知识库问答 >
问题:

下拉列表更改时,虚线散点图不更新

丰辰沛
2023-03-14

我正试图用Plotly编写散点图,并使其具有交互式trhough Dash回调,问题是当我更改下拉列表时,我的图形没有更新。数据结构如下所示:

报告修订周期202002年第29/02/2020号第16793 3 202001年第31/01/2020号第18933 1 202101年第31/01/2021 6246 132 202001年第17/01/2020 13 1号第

#Importar librerías
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.graph_objs as go
import pandas as pd

#Carga de datos
df_temp = pd.read_excel(r'D:\Python\Datos_maestros\periodo.xlsx')

app = dash.Dash()
fechas = []
for fecha in df_temp['periodo'].unique():
    fechas.append({'label': str(fecha), 'value': fecha})

#Definición del layout de la app a partir de componentes HTML y Core
app.layout = html.Div([
    dcc.Graph(id='graph_line'),
    dcc.Dropdown(id='selector_fecha', options = fechas, value = '') #Seleccionamos todo el rango de fechas de nuestro dataframe
])

# CREACIÓN DE GRÁFICOS E INTERACTIVIDAD
#Callback para actualizar gráfico en función del rango de fechas seleccionadas
@app.callback(Output('graph_linea', 'figure'),
              [Input('selector_fecha', 'value')])
def actualizar_graph(fecha):
    filtered_df = df_temp[df_temp['periodo'] == fecha]
    #Creación de 1 traza por cada ciudad de nuestro dataframe
    traces = []
    for nombre_area in filtered_df['Direccion'].unique():
        df_area = filtered_df[filtered_df['Direccion'] == nombre_area]
        traces.append(go.Scatter(
            x=df_area['revisados'],
            y=df_area['errores'],
            text=df_area['Direccion'],
            mode='markers',
            opacity=0.7,
            marker={'size': 15},
            name=nombre_area
        ))
    
        return { #Se retornan los objetos data y layout para ser enviados al Output con identificador graph_linea
            'data': traces,
            'layout': go.Layout(
                xaxis={'title': 'Fecha'},
                yaxis={'title': 'Errores'},
                hovermode='closest'
            )
        }


if __name__ == '__main__':
    app.run_server(port=5000)

共有1个答案

楚茂实
2023-03-14

我知道这并不总是可行的,但对于未来的问题,请尝试将您的问题重构为一个可复制的示例。意思是我们每个人都可以复制的一段代码。这使得我们可以更容易地帮助您,因为我们无法运行您的代码,因为缺少了。xslx文件。

尽管如此,我认为存在两个主要问题。正如@coralvanda已经提到的,您的return语句位于for循环内,这很奇怪。我假设你应该把它拉出来,除非你打算在第一次迭代后停止循环。其次,更新plotly graph涉及地物对象。看看围棋。图()。首先添加地物对象,然后添加所需的轨迹。固定代码可能如下所示:

#Importar librerías
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.graph_objs as go
import pandas as pd

#Carga de datos
df_temp = pd.read_excel(r'D:\Python\Datos_maestros\periodo.xlsx')

app = dash.Dash()
fechas = []
for fecha in df_temp['periodo'].unique():
    fechas.append({'label': str(fecha), 'value': fecha})

#Definición del layout de la app a partir de componentes HTML y Core
app.layout = html.Div([
    dcc.Graph(id='graph_line'),
    dcc.Dropdown(id='selector_fecha', options = fechas, value = '') #Seleccionamos todo el rango de fechas de nuestro dataframe
])

# CREACIÓN DE GRÁFICOS E INTERACTIVIDAD
#Callback para actualizar gráfico en función del rango de fechas seleccionadas
@app.callback(Output('graph_linea', 'figure'),
              [Input('selector_fecha', 'value')])
def actualizar_graph(fecha):
    fig = go.Figure()
    
    filtered_df = df_temp[df_temp['periodo'] == fecha]
    #Creación de 1 traza por cada ciudad de nuestro dataframe
    traces = []
    for nombre_area in filtered_df['Direccion'].unique():
        df_area = filtered_df[filtered_df['Direccion'] == nombre_area]
        fig.add_trace(
            go.Scatter(
                x=df_area['revisados'],
                y=df_area['errores'],
                text=df_area['Direccion'],
                mode='markers',
                opacity=0.7,
                marker={'size': 15},
                name=nombre_area
            )
        )
    
    fig['layout'] = go.Layout(
        xaxis={'title': 'Fecha'},
        yaxis={'title': 'Errores'},
        hovermode='closest'
    )
    
    return fig


if __name__ == '__main__':
    app.run_server(port=5000)
 类似资料:
  • 我试图构建一个仪表板,其中图形根据下拉框中传递的值进行更新。 由于某些原因,图表不适应下拉列表中的任何更改。这方面的特点是: > 输入是肯定收到的:我创建了第二个函数,它具有相同的结构,但更新了不同的字段。它工作正常。 问题似乎是图形显示:我创建了一个不同版本的函数,其中更新函数将返回默认值1的“无”。图形的区域起初是空的,但是当在下拉列表中选择一个新值时,它会变成其中一个图形。一旦显示了一个图,

  • 是的,所以我不知道我在做什么。哈。 我想改变select2的未打开的下拉菜单的颜色(也许还有边上的按钮),但是寻找解决方案只是设法阻碍了我 这样可以更改选项(这很好!)但并不是我想要的100%。 有没有改变下拉初始状态颜色的类

  • 如何更改散点图中标记线的粗细?是中的有效属性;图是否有等价属性? 我不是想改变尺寸而是线条粗细!

  • 问题内容: 我正在JSP中创建一个页面,其中有一个下拉列表,一旦用户选择了一个值,他就必须单击go按钮,然后将该值发送到Servlet。 我该如何做才能在变更时做到呢?例如,当用户选择John时,将从数据库中检索出他的所有详细信息并显示出来。我希望系统无需单击“执行”按钮即可执行此操作。 问题答案: 只需询问JavaScript的帮助。

  • 关联的excel数据 xVal和yVal可以成功替换,但如何替换C列(extList)? xVal和yVal替换为以下方式

  • 我有一张表格 表单有多个输入类型文本和一个下拉菜单。 我还有一个名为(submit1)的提交按钮 我的PHP读起来是这样的: 如果我按下按钮,它就工作了,没问题。 但我也想从下拉菜单中提交表格更改。。。因此,它可以通过按下按钮或更改下拉列表来执行。。。所以我的下拉列表如下 当我选择我的下拉列表时,页面刷新,但是PHP中的代码没有执行。。。我想这和$u POST['submit1']的名字有关。。。