我正在尝试使用 plotly/Dash 绘制一些时间序列数据,但图形将无法正确显示,尽管 x 轴的类型为“datetime.date”、“datetime.datetime”或格式正确的字符串(没有任何效果.. .)。可能使问题复杂化的是,我使用不同的函数生成了时间序列数据,将其存储到 dcc.Store 对象(作为 dict)中,然后将其转换回 Dataframe ......但我不确定。我的代码如下,但总结一下简单的行动计划:
将资产的 Ticker 输入到输入框中,该输入框会生成一个字典并存储到 dcc.Store 中(我想重新使用这个时间序列,因此存储它而不是一次又一次地重复外部Bloomberg调用)
立即从 dcc.Store 检索该字典,转换回 Dataframe 并生成简单图
查看每个步骤生成的数据类型时,我可以看到在使用 df.to_dict() 生成 dict 后,我有以下类型的数据:
{'Date': {0: datetime.date(2017, 1, 1),
1: datetime.date(2017, 2, 1),
2: datetime.date(2017, 3, 1),
3: datetime.date(2017, 4, 1),
.
.
28: datetime.date(2019, 5, 1)},
'FD004': {0: 18890.3544,
1: 18296.9503,
2: 18667.1757,
.
.
28: 16697.2425}}
然后在将此 dict 转换回 Dataframe 之后,我有:
Date FD004
0 2017-01-01 18890.3544
1 2017-02-01 18296.9503
2 2017-03-01 18667.1757
其中df ['日期']:
0 2017-01-01
1 2017-02-01
2 2017-03-01
.
.
27 2019-04-01
28 2019-05-01
Name: Date, dtype: object
但是然后我使用 to_datetime 或 astype('datetime64[ns]') 转换它,这给了我“正确的”dtype:
0 2017-01-01
1 2017-02-01
2 2017-03-01
.
.
27 2019-04-01
28 2019-05-01
Name: Date, dtype: datetime64[ns]
事实上,在检查生成的最终无花果时,我看到 plotly 已将其识别为日期时间对象:
<bound method BaseFigure.show of Figure({
'data': [{'type': 'scatter',
'x': array([datetime.datetime(2017, 1, 1, 0, 0),
datetime.datetime(2017, 2, 1, 0, 0),
datetime.datetime(2017, 3, 1, 0, 0),
. . .
datetime.datetime(2019, 3, 1, 0, 0),
datetime.datetime(2019, 4, 1, 0, 0),
datetime.datetime(2019, 5, 1, 0, 0)], dtype=object),
'y': array([18890.3544, 18296.9503, 18667.1757, ...
13202.488 , 14463.2424, 15025.5053, 16697.2425])}],
'layout': {'template': '...'}
})>
但仍然......图表显示像意大利面条:
明月笑刀无情
相关分类