python - 当文本框中的输入更改时重新加载图表

标签 python plotly plotly-dash

目前我遇到的情况是,只要文本框中的输入发生变化,我就必须让图表发生变化。我还想确保每当对文本框进行更改时,它都会反射(reflect)到我想要从数据库[图表]输出的结果,并且这应该连续完成,即图表将连续流动。

然而,在尝试使用按钮启动 n 个间隔之后,我仍然失败了。

如果任何人都可以看看我的代码,那就太好了。太感谢了。

import dash
from dash.dependencies import Output, Input
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
import plotly.graph_objs as go
from collections import deque
import sqlite3
import pandas as pd
import time


external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div(
    [   html.H2('Live Twitter Sentiment Trend'),
        dcc.Input(id='sentiment_term', value='trump', type='text'),
        dcc.Graph(id='live-graph', animate=False),
        dcc.Interval(
            id='graph-update',
            interval=1*1000,
            n_intervals = 0
        ),

    ]
)

@app.callback(
    Output('live-graph', 'figure'),
    [Input(component_id='sentiment_term', component_property='value'),
    [Input(component_id='graph-update', component_property='n_intervals')])


def update_graph_scatter(sentiment_term):
    try:
        conn = sqlite3.connect('twitter.db')
        conn.cursor()
        df = pd.read_sql("SELECT * FROM sentiment WHERE tweet LIKE ? ORDER BY unix DESC LIMIT 1000", conn ,params=('%' + sentiment_term + '%',))
        df.sort_values('unix', inplace=True)
        df['sentiment_smoothed'] =                 
         df['sentiment'].rolling(int(len(df)/2)).mean()

        df['date'] = pd.to_datetime(df['unix'],unit='ms')
        df.set_index('date', inplace=True)

        df = df.resample('0.15min').mean()
        df.dropna(inplace=True)
        X = df.index
        Y = df.sentiment_smoothed

        data = plotly.graph_objs.Scatter(
                x=X,
                y=Y,
                name='Scatter',
                mode= 'lines+markers'
                )

        return {'data': [data],'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),
                                                    yaxis=dict(range=[min(Y),max(Y)]),
                                                    title='Term: {}'.format(sentiment_term))}

    except Exception as e:
        with open('errors.txt','a') as f:
            f.write(str(e))
            f.write('\n')

if __name__ == '__main__':
    app.run_server(debug=True)

最佳答案

您的回调函数 update_graph_scatter 缺少第二个参数。您可以将其更改为:

def update_graph_scatter(sentiment_term, n_intervals):

您的回调装饰器还应该是:

@app.callback(
Output('live-graph', 'figure'),
[Input(component_id='sentiment_term', component_property='value'),
Input(component_id='graph-update', component_property='n_intervals')])

因为它有一个额外的“[”打破了它。

我不确定这是否会导致您的问题,但有可能。我希望我有 50 点声誉来将其作为纯粹的评论发布,因为它的贡献很小。

关于python - 当文本框中的输入更改时重新加载图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57607857/

相关文章:

python - 如何在 Python 中的两个字符串之间拆分每个单独的值

python - 安装django后更改python版本

r - 绘图标记大小

生成生成器和聚合结果的 Python 函数

python - 在绘图中添加索引作为下拉菜单

r - Plotly - 表面 - 文本悬停信息不起作用

python-3.x - Python Dash 数据表 : Row selection Not working

python - 将 dash_html_components 传递给 Jinja 模板

python - "suppress_callback_exceptions"在破折号 Python 中的作用是什么?

python - 如何在 App Engine Python 上创建谷歌云存储签名 URL