AttributeError: 'Frame' object has no attribute 'update_traces'
时间: 2023-06-21 15:19:26 浏览: 220
mdk_armcc_user_guide.pdf
非常抱歉,我之前的回答是有误的。`Frame` 对象确实没有 `update_traces` 方法。要实现动态更新柱状图的颜色,可以使用 `update_layout` 方法并设置 `marker.color` 的值。
下面是修改后的示例代码:
```python
import plotly.graph_objs as go
from plotly.subplots import make_subplots
import numpy as np
# 创建子图
fig = make_subplots(rows=1, cols=1)
# 创建初始数据
x = np.arange(1, 11)
y = np.random.randint(1, 10, 10)
# 创建初始柱状图
bar_trace = go.Bar(
x=x,
y=y,
name='Dynamic Bar'
)
# 将初始柱状图添加到子图中
fig.add_trace(bar_trace)
# 创建动态更新函数
def update_bars(num):
# 按步长更新柱状图数据
y[num:num+2] = np.random.randint(1, 10, 2)
# 更新柱状图数据
fig.data[0].y = y
# 更新布局
fig.update_layout(title_text=f"Step {num+1}")
# 设置每个步长的等待时间
return fig, 1000
# 创建动态图
fig.update_layout(updatemenus=[dict(type='buttons',
showactive=False,
buttons=[dict(label='Play',
method='animate',
args=[None, {'frame': {'duration': 500, 'redraw': True},
'fromcurrent': True,
'transition': {'duration': 0}}])])])
frames = [go.Frame(data=[go.Bar(x=x, y=y, marker_color='blue')]) for i in range(len(x)-1)]
for i in range(len(x)-1):
frame = go.Frame(data=[go.Bar(x=x, y=y, marker_color=['blue']*len(x))])
frame.update_layout(title_text=f"Step {i+1}")
frame.update_layout({'marker.color': ['red']*(i+2) + ['blue']*(len(x)-i-2)})
frames[i] = frame
fig.frames = frames
fig.update_layout(title_text='Dynamic Bar Chart')
# 显示动态图
fig.show()
```
这个示例代码会生成一个包含10个柱状图的动态图,每个柱状图之间的时间间隔为1秒钟。你可以根据实际需求更改数据和时间间隔。在每个帧中,我们通过设置 `marker.color` 的值来动态更新柱状图的颜色。帧的数量与数据的数量相同,每个帧都会更新某些柱状图的颜色。
阅读全文