使用Python离线更新Plotly图表

11

我正在使用Plotly离线版在Jupyter上操作。

我正在绘制曲线:

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
from plotly.graph_objs import *
import datetime as dt

list_date = [dt.datetime(2016,1,1).date(), dt.datetime(2016,1,2).date(), dt.datetime(2016,1,3).date(), dt.datetime(2016,1,4).date()]
data = []
for i in range(3) :
    list = [i/2+1, i/2+2, i/2+3, i/2+4]
    data.append(Scatter(x=list_date, y=list, name='y'+str(i)))
figure = Figure(data=data)
iplot(figure)

而且我得到了一个非常漂亮的图表!在后一种情况下,用户希望在其上添加一个条形图(除了已经存在的两条线之外)。

list_bar = [0.5, 1.5, 2.5, 3.5]
data = [Bar(x=list_date, y=list_bar, name='bar')]
figure.update(data=data)
iplot(figure)

但是我只有柱状图,没有前面那两条线。 如何离线获得在线函数fileopt='append'的等效功能?

py.plot(data, filename='append plot', fileopt='append')
1个回答

2
在最新的 Plotly 版本 3 中,增加了 FigureWidget,专门用于处理您想要更新现有离线图的问题。
对我来说,在 Anaconda 环境中运行“pip install plotly --upgrade”命令可获得最新版本。
我修改了下面的示例代码以使用新的 FigureWidget,并在需要更改的旧代码中添加了注释。新的 FigureWidget 旨在与您使用的普通 Figure 兼容。
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
from plotly.graph_objs import *

import datetime as dt

# list_date = [dt.datetime(2016,1,1).date(), dt.datetime(2016,1,2).date(), dt.datetime(2016,1,3).date(), dt.datetime(2016,1,4).date()]
list_date = [dt.datetime(2016,1,1), dt.datetime(2016,1,2), dt.datetime(2016,1,3), dt.datetime(2016,1,4)]

data = []
for i in range(3) :
    list = [i/2+1, i/2+2, i/2+3, i/2+4]
    data.append(Scatter(x=list_date, y=list, name='y'+str(i)))
# figure = Figure(data=data)
# iplot(figure)
figure = FigureWidget(data=data)
figure

我已经将被更改的部分注释掉了,这样您可以参考它们。

First plot from code above

另外需要注意的一点是,由于ipykernel.json_util中存在问题,将Plotly JSON对象序列化以在Jupyter屏幕上显示的json_clean函数不知道如何处理datetime.date对象,只能处理datetime对象。如果不删除.date,则会出现异常并且无法显示图形。我猜测这也会发生在datetime.time对象上,因为它似乎在当前的ipykernel代码中也未被处理。
当您准备好运行更新后的代码时,只需创建数据并使用add_trace函数即可:
list_bar = [0.5, 1.5, 2.5, 3.5]
figure.add_trace(Bar(x=list_date, y=list_bar, name='bar'))

您的情节会自动更新到前一个单元格中,包括新增的追踪信息。

Same plot but now updated with trace

最后,对于感兴趣的人,这里有一个关于新FigureWidget的好指南

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接