python - Plotly-Dash 存在未知问题,并使用 Python-pandas.date_range 创建 "Error loading dependencies"

标签 python plotly plotly-dash

我偶然发现this发布并使用了我自己的程序的最终答案的评论中提到的修改。但在我尝试使用以下代码对其进行测试之前:

import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import pandas as pd

app = dash.Dash()

daterange = pd.date_range(start='1994',end='2018',freq='W')

app.layout = html.Div(children=[
    html.H1('Range Slider Testing'),
    html.Div(
        [
            html.Label('From 1994 to 2018', id='time-range-label'),
            dcc.RangeSlider(
                id='year_slider',
                min=daterange.min (),
                max=daterange.max (),
                value = [daterange.min(), daterange.max()],
                step='W',
            ),
        ],
        style={'margin-top': '20'}
    ),
    html.Hr(),

    dcc.Graph(id='my-graph')
])

@app.callback(
    dash.dependencies.Output('my-graph', 'figure'),
    [dash.dependencies.Input('year_slider', 'value')])
def _update_graph(year_range):
    date_start = '{}'.format(year_range[0])
    date_end = '{}'.format(year_range[1])

@app.callback(
    dash.dependencies.Output('time-range-label', 'children'),
    [dash.dependencies.Input('year_slider', 'value')])
def _update_time_range_label(year_range):
    return 'From {} to {}'.format(year_range[0], year_range[1])

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

因此,它不会引发任何 Python 错误,但由 Dash 创建的 HTML 上有一个加载依赖项时出错文本...

最佳答案

默认情况下,dash 似乎不支持日期时间对象。

您可以通过将日期时间对象转换为 unix 时间戳来解决此问题。

我对您问题的解决方案是:

import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import pandas as pd

import time

app = dash.Dash()

daterange = pd.date_range(start='1994',end='2018',freq='W')

def unixTimeMillis(dt):
    ''' Convert datetime to unix timestamp '''
    return int(time.mktime(dt.timetuple()))

def unixToDatetime(unix):
    ''' Convert unix timestamp to datetime. '''
    return pd.to_datetime(unix,unit='s')

def getMarks(start, end, Nth=100):
    ''' Returns the marks for labeling. 
        Every Nth value will be used.
    '''

    result = {}
    for i, date in enumerate(daterange):
        if(i%Nth == 1):
            # Append value to dict
            result[unixTimeMillis(date)] = str(date.strftime('%Y-%m-%d'))

    return result

app.layout = html.Div(children=[
    html.H1('Range Slider Testing'),
    html.Div(
        [
            html.Label('From 1994 to 2018', id='time-range-label'),
            dcc.RangeSlider(
                id='year_slider',
                min = unixTimeMillis(daterange.min()),
                max = unixTimeMillis(daterange.max()),
                value = [unixTimeMillis(daterange.min()),
                         unixTimeMillis(daterange.max())],
                marks=getMarks(daterange.min(),
                            daterange.max()),
            ),
        ],
        style={'margin-top': '20'}
    ),
    html.Hr(),

    dcc.Graph(id='my-graph')
])

@app.callback(
    dash.dependencies.Output('time-range-label', 'children'),
    [dash.dependencies.Input('year_slider', 'value')])
def _update_time_range_label(year_range):
    return 'From {} to {}'.format(unixToDatetime(year_range[0]),
                                  unixToDatetime(year_range[1]))

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

关于python - Plotly-Dash 存在未知问题,并使用 Python-pandas.date_range 创建 "Error loading dependencies",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49371248/

相关文章:

javascript - 为什么我的plotly 绘图在某些条件下无法使用plotly.js 显示

python - 一页上的多个 plotly plots 没有子图

python - 如何将 uuid 库与 mod_wsgi 一起使用?

python - Tkinter Radiobutton 中指定宽度的垂直对齐字符串

python - 如何在 Python 中实现二叉搜索树?

python - 属性错误: module 'pandas' has no attribute 'np' - Cufflinks spread graph

angular - 当鼠标悬停在 Plotly.js 上时,Plotly.js 显示的不是跟踪的全名

带女服务员的 Python Dash 服务器

python - 在 Jupyter 笔记本中运行 Dash 时出现问题

python - 在哪里可以找到函数的 kwargs/args 文档