使用 matplotlib 将时间序列图转换为 plotly

Posted

技术标签:

【中文标题】使用 matplotlib 将时间序列图转换为 plotly【英文标题】:convert time series plot using matplot to plotly 【发布时间】:2015-01-06 04:07:42 【问题描述】:

我最近遇到了plotly,这是一个非常强大的交互式在线剧情系统。所以我正在考虑将matplot生成的图转换为plotly。除了时间序列图外,一切正常。

这是我的代码的简单版本。

import pandas as pd
import matplotlib.pyplot as plt
import plotly.plotly as py
import plotly.tools as tls
tls.set_credentials_file(
        username="edwinwang1988", 
        api_key="o8xw6s61dn")
import numpy as np

x = pd.date_range('1/1/2001',periods =72,freq='D')  # genrate a date range
Series = pd.DataFrame(x,columns=['Date']) # generate a date range data frame

np.random.seed(0)
col = ['A','B','C','D'] #set col names for return series
s = pd.DataFrame(np.random.randn(72,4),columns=col) # generate random return series with col names as col
for i in range(len(col)):
    s[col[i]] = s[col[i]].cumsum()

s['Date']=x  # add date to dataframe s
s.plot(x='Date') # plot s and set date as x axis

这很好用,并给我想要的情节,日期为 x 轴。但是当我试图将数字转换为 plotly 时。

mpl_fig2= plt.gcf()
py.iplot_mpl(mpl_fig2,strip_styple = True,filename='test')

我看到类似“min() arg is an empty sequence”之类的代码错误,有时这个“year=1 在 1900 年之前;datetime strftime() 方法需要 year >= 1900”

【问题讨论】:

【参考方案1】:

完全披露,我为 Plotly 工作。

tl;博士:

在你的终端运行它,它应该是固定的:

pip install --upgrade plotly

上下文:

所以,pandas 可以在 matplotlib 中对日期做一些有趣的事情。这就是 matplotlib 处理日期的方式,基本上:

UTC 中第 1 年的第 1 天是浮点 1.0

http://matplotlib.org/api/dates_api.html#module-matplotlib.dates

根据您使用 pandas 格式化日期的方式,您最终可以使用 pandas TimeSeries_DateFormatter。据我所知,这样做的后果实际上是将与日期时间关联的基础数据更改为以下约定:

UTC 1970 年的第 1 天是浮点 0.0

因此,自纪元 (http://en.wikipedia.org/wiki/Unix_time) 以来的天数(不是秒数!)。仅供参考,这可以通过使用负数回到 ~9-22-1677

问题:

plotly 将 matplotlib 中的日期时间视为 matplotlib 日期时间,但 pandas 添加了一个格式化程序来改变这一点。 plotly 1.4.2 中添加了一个补丁

【讨论】:

由于某种原因仍然无法正常工作。我得到相同的错误代码。 @theengineear

以上是关于使用 matplotlib 将时间序列图转换为 plotly的主要内容,如果未能解决你的问题,请参考以下文章

如何将 matplotlib 频谱图图像转换为火炬张量

将日期时间转换为 matplotlib 日期时间 xaxis 的数字

Python将瀑布图转换为plotly

将索引转换为日期时间对象后,MatplotLib 无法正确绘制熊猫时间序列 1 分钟数据

如何使用 matplotlib/numpy 将数组保存为灰度图像?

使用 matplotlib 将图像显示为灰度