首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Plotly:如何使用新数据更新/重绘绘图表达图形?

Plotly:如何使用新数据更新/重绘绘图表达图形?
EN

Stack Overflow用户
提问于 2020-09-03 11:49:51
回答 2查看 5.1K关注 0票数 4

在调试或计算繁重的循环期间,我希望看到我的数据处理过程是如何发展的(例如,在线条图或图像中)。

在matplotlib中,代码可以使用plt.cla()重绘/更新图形,然后使用plt.draw()plt.pause(0.001),这样我就可以实时或在调试时跟踪我的计算进度。我如何在密谋表达(或密谋)中做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2020-09-26 04:13:42

所以我想我基本上已经弄明白了。诀窍是不使用go.Figure()创建图形,而是使用go.FigureWidget()创建图形,这在视觉上是相同的,但在幕后却不是。

documentation

youtube video demonstration

这些FigureWidgets就在那里,随着新数据的到来而更新。它们保持动态,以后的调用可以修改它们。

可以从图形生成FigureWidget:

代码语言:javascript
运行
复制
figure = go.Figure(data=data, layout=layout)

f2 = go.FigureWidget(figure)
f2                                          #display the figure

这很实用,因为它使得使用简化的plotly express接口来创建图形,然后使用它来构造FigureWidget成为可能。不幸的是,plotly似乎没有自己的简化FigureWidget模块。所以我们需要使用更复杂的go.FigureWidget

票数 4
EN

Stack Overflow用户

发布于 2020-09-03 16:47:29

我不确定是否存在针对plotly的标识功能。但您至少可以构建一个图形,扩展您的数据源,然后只需替换图形的数据,而不需要像这样接触任何其他图形元素:

代码语言:javascript
运行
复制
for i, col in enumerate(fig.data):
    fig.data[i]['y'] = df[df.columns[i]]
    fig.data[i]['x'] = df.index

如果您的图形是使用plotly.expressgo.Figure的结果,这并不重要,因为这两种方法都将生成可通过上面的代码片段编辑的图形结构。您可以通过在JupyterLab中的两个不同单元格中设置以下两个代码片段来亲自测试这一点。

单元格1的代码

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from jupyter_dash import JupyterDash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

# code and plot setup
# settings
pd.options.plotting.backend = "plotly"

# sample dataframe of a wide format
np.random.seed(5); cols = list('abc')
X = np.random.randn(50,len(cols))  
df=pd.DataFrame(X, columns=cols)
df.iloc[0]=0;df=df.cumsum()

# plotly figure
fig = df.plot(template = 'plotly_dark')
fig.show()

单元格2的代码

代码语言:javascript
运行
复制
# create or retrieve new data
Y = np.random.randn(1,len(cols))

# organize new data in a df
df2 = pd.DataFrame(Y, columns = cols)

# add last row to df to new values
# this step can be skipped if your real world
# data is not a cumulative process like
# in this example
df2.iloc[-1] = df2.iloc[-1] + df.iloc[-1]

# append new data to existing df
df = df.append(df2, ignore_index=True)#.reset_index()

# replace old data in fig with new data
for i, col in enumerate(fig.data):
    fig.data[i]['y'] = df[df.columns[i]]
    fig.data[i]['x'] = df.index

fig.show()

运行第一个单元格将把一些数据放在一起,并构建如下所示的图形:

运行第二个单元格将生成一个只有一行的新数据帧,将其附加到原始数据帧,替换现有图中的数据,并再次显示该图。您可以根据需要多次运行第二个单元格,以使用扩展的数据集重新绘制图形。运行50次后,您的图形将如下所示:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63716543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档