调试 Plotly 表面标题未更新
Posted
技术标签:
【中文标题】调试 Plotly 表面标题未更新【英文标题】:Debug Plotly Surface Title Not Updating 【发布时间】:2020-10-06 10:43:45 【问题描述】:我用循环函数编写了以下简单代码:
import plotly.graph_objects as go
import pandas as pd
import numpy as np
import plotly.io as pio
pio.renderers.default='iframe_connected'
import math
%matplotlib inline
x=[-3,-2,-1,0,1,2,3]
y=x
init=0
def surface(x,y,stop,time,ct):
z=[[],[],[],[],[],[],[]]
i=0
for _ in x:
for __ in y:
try:
a=math.sqrt(ct*time+_**2-__**2)
except ValueError:
a=0
z[i].append(a)
i+=1
for _ in z:
_=list(map(lambda x:round(x,2),_))
z_2d=np.array(z).reshape(7,7)
surf=go.Figure(
layout=go.Layout(
template='plotly_dark',
title=dict(
text='Surface after seconds'.format(time),
xref='paper',
pad_t=15
)
)
)
surf.add_trace(
go.Surface(
showlegend=False,
x=x,
y=y,
z=z_2d,
surfacecolor=z_2d,
colorbar=dict(
tickmode='auto',
ticks='outside',
nticks=6
),
colorscale='Jet'
)
)
pio.show(surf)
time+=1
if time<stop:
surface(x,y,stop,time,ct)
else:
pass
surface(x,y,10,init,np.e)
这个想法是每个打印标题的表面都应该随着变量time
的变化而变化time+=1
。递归正确打印了 10 个曲面,但标题是随机分配的,我不明白为什么,我什至在添加 +1
之前和之后添加了 print(time)
,并且在打印曲面时它正确打印 1,2
然后 @ 987654331@,然后是3,4
,等等。但标题一直说“0秒后”,即使它应该说“3”;或“6 秒后”,当它应该分别说“5,6,7,8”时突然变为“9”或其他什么。这里有一些示例:
请您帮忙指出我做错了什么,提前谢谢!
【问题讨论】:
【参考方案1】:我相信您的问题是pio
将图像创建为 html 与尝试使用pio.show(surf)
显示图像之间的时间。当您使用iframe_connected
时,情节将:
...将数字写入独立的 HTML 文件,然后显示 iframe 引用这些 HTML 文件的元素...
和
使用 iframe 渲染器,图形数据存储在 单个 HTML 文件...
所以,如果在下一个准备好之前调用pio.show(surf)
,那么之前的 html 将最终被使用。
要对此进行测试,首先尝试在pio.show(surf)
之前添加一个打印语句来检查您的布局,您应该会看到标题设置正确。比如:
print(surf)
pio.show(surf)
您会看到以下版本的递增:
...
'layout': 'template': '...', 'title': 'pad': 't': 15, 'text': 'Surface after 0 seconds', 'xref': 'paper'
...
接下来添加一个延迟,让 plotly 有时间生成 html:
tm.sleep(5)
pio.show(surf)
注意:您需要在顶部添加import time as tm
。此外,time
通常是一个不好的变量名称,但我们可以避免 as tm
的问题。
【讨论】:
你说得对,问题是我没有时间创建新的 html,添加时间 3 给了我完美的解决方案。非常感谢您的帮助,非常感谢您花时间检查我的问题!以上是关于调试 Plotly 表面标题未更新的主要内容,如果未能解决你的问题,请参考以下文章