python - 带有 Plotly Dash 的日期滑块不起作用
问题描述
我正在尝试使用日期时间滑块构建一个破折号应用程序,但以下代码不起作用 - url 显示“加载布局错误”。我是在做一些愚蠢的事情,还是在日期时间对象上构建滑块需要任何技巧?可重现的代码如下:
import dash
import dash_core_components as dcc
import dash_html_components as html
import datetime
base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(0, 10)]
app = dash.Dash()
app.layout = html.Div([
html.Label('Slider'),
dcc.RangeSlider(min=min(date_list),
max=max(date_list),
value=min(date_list))
])
if __name__ == '__main__':
app.run_server()
解决方案
Plotly-Dash 当前不支持日期时间对象。
您的问题的解决方案是在我对另一个问题Ploly datetime的回答中描述
一种可能的解决方案是在初始化时使用两个不同的参数:
- 价值
- 分数
使用 pandas 生成时间戳的示例:
需要进口:
import pandas as pd
import time
一些需要的功能:
daterange = pd.date_range(start='2017',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
对于 RangeSlider 对象,您可以像这样初始化它:
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())
)
推荐阅读
- python - How to filter observations in pandas data frame using a for-loop?
- python - 为 Dask 分布式客户端准备数据的最佳方式
- javascript - Change background when select
- ios - iOS Distribution Certificates
- python - 3D tensor subsetting operation
- opencv - Which is faster when deploying cnn models by TensorFlow Lite, Caffe2 or OpenCV?
- r - 我可以用 5 个完全独立的 ggplots 模仿 facet_wrap() 吗?
- excel - Excel - 使用同一列生成多个系列折线图
- android - Firebase 函数接收对象而不是字符串
- java - How can I add to a SortedArrayList using BinarySearch and Comparable?