为了账号安全,请及时绑定邮箱和手机立即绑定

破折号错误地格式化时间序列的 x 轴

破折号错误地格式化时间序列的 x 轴

哈士奇WWW 2022-05-24 12:51:03
我正在尝试使用 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       FD0040   2017-01-01  18890.35441   2017-02-01  18296.95032   2017-03-01  18667.1757其中df ['日期']:0     2017-01-011     2017-02-012     2017-03-01..27    2019-04-0128    2019-05-01Name: Date, dtype: object但是然后我使用 to_datetime 或 astype('datetime64[ns]') 转换它,这给了我“正确的”dtype:0    2017-01-011    2017-02-012    2017-03-01..27   2019-04-0128   2019-05-01Name: 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': '...'}})>但仍然......图表显示像意大利面条:
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

看起来日期并不是全部按递增顺序排序的,因此看起来像“意大利面条”(当回到过去时)。您的打印件显示的数据看起来已排序,因此我不确定,但中心部分丢失,以检查它们是否已排序运行

np.all(np.sort(df['Date']) == df['Date'])

您可以对数据进行排序(例如使用np.sortand np.argsort),或者如果您只对点而不是线感到满意,请使用mode='markers'散点图(参见https://plot.ly/python/line-and-scatter/)。


查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号