【问题标题】:Passing a Column Name in A Function在函数中传递列名
【发布时间】:2019-03-05 15:45:31
【问题描述】:

您好,我目前正在尝试在 python dash 上构建散点图,我可以在其中将下拉列表(由不同的列名组成)连接到散点图。因此,当我更改下拉列表的值时,散点图将根据下拉列表的值显示不同的值。但是,我的问题是列名本质上是一个字符串,下拉列表包含这些值的字典,因此很难通过。这是我现在拥有的代码:

html.Div([dcc.Dropdown(
    id='mood',
    options=[
        {'label': 'Positive', 'value': 'Positive'},
        {'label': 'Negative', 'value': 'Negative'},
        {'label': 'Compound', 'value': 'Compound'}],
    value='Compound')], style={'width':'15%'}
    ),
html.Div([
dcc.Graph(id='linear')]),
html.Div([
dcc.Graph(id='linear2')])
])

@app.callback(
dash.dependencies.Output('linear','figure'),
[dash.dependencies.Input('mood','value')])

def update_graph(mood_name):
y=file.get(column) ==mood_name]
scatter=go.scatter(y=y,marker=dict(
    color='rgb(0,191,255)', # code for sky blue 0,191,255
    line=dict(
        color='rgb(8,48,107)',
        width=1.5,
    )),opacity=0.6,name='Sentiment')
layout=go.Layout(xaxis={'title': 'Tweets'},
                         yaxis={'title': 'Polarity'},
                         title= 'Tweets',
                         hovermode='closest')
return {'data':[scatter],
        'layout':[layout]}

def update graph 函数是我在传递这些列名(正、负和复合)时遇到问题的地方。任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: python function callback plotly plotly-dash


    【解决方案1】:

    也许您在通过value 过滤来自dropdown 的数据框时选择了错误。 代码:

    from flask import Flask
    import dash
    import dash_core_components as dcc
    import dash_html_components as html
    from dash.dependencies import Input, Output
    import pandas as pd
    import plotly
    import plotly.graph_objs as go
    
    server = Flask(__name__)
    app = dash.Dash(server=server)
    df = pd.DataFrame({"Pos": [4, 5, 7, 8],
                       "Neg": [3, 6, 8, 9],
                       "Compound": [7, 11, 15, 17],
                       "values": [1, 2, 3, 4]})
    app.layout = html.Div(
        [
            html.H1("Scatter with dropdown"),
            dcc.Dropdown(
                  id='dropdown',
                  options=[{'label': 'Pos', 'value': 'Pos'},
                           {'label': 'Neg', 'value': 'Neg'},
                           {'label': 'Compound', 'value': 'Compound'}],
                  value='Compound'
              ),
            html.Div(id='scatter'),
              ])
    
    
    @app.callback(
        Output("scatter", "children"),
        [Input("dropdown", "value")],
    )
    def change_scatter(value):
        """Change scatter according to dropdown."""
        global df
        dff = df[['values', value]]
        return html.Div(dcc.Graph(
            id='scatter-plot',
            figure={
                'data': [
                    {
                        'x': dff['values'],
                        'y': dff[value],
                        'type': 'scatter',
                        # 'text': dff[value],
                        'name': value
                    }
                ],
                'layout': {
                    'xaxis': {'title': 'Position'},
                    'yaxis': {'title': 'Values'},
                }
            }
        ))
    
    
    if __name__ == "__main__":
        app.run_server(debug=True, port=8888)
    

    输出: 希望这个例子可以帮助你发现错误

    【讨论】:

    • 谢谢!这是完美的!
    猜你喜欢
    • 1970-01-01
    • 2017-04-15
    • 2011-02-08
    • 1970-01-01
    相关资源
    最近更新 更多