python - 如何使用 plotly express 创建热图动画?
问题描述
我有一个方阵列表 M[t],其中 t 的范围从 0 到 N,我希望使用 plotly.express 创建一个动画热图。每行/列中的条目对应一个列表,a=['a1','a2',...'aN']
关于动画的情节文档相当稀疏,只关注散点图和条形图
https://plotly.com/python/animations/
与我类似的问题已发布在
但是,用户正在使用 Jupyter 笔记本。我只是在 Mac (OS 10.15.4) 上使用带有 IDLE 的 Python 3.7
我知道如何使用 matplotlib 或 seaborn 创建基本动画,但我喜欢 plotly express 附带的内置开始/停止按钮。这是我使用的一种方法,但我确信使用 matplotlib.animation 有更有效的方法:
import numpy as np
import matplotlib.pyplot as plt
#50 matrices, each of size 4-by-4.
N = 50
M = np.random.random((50, 4,4))
#Desired labels for heatmap--not sure where to put.
labels=['a','b','c','d']
fig, ax = plt.subplots()
for t in range(50):
ax.cla()
ax.imshow(M[t])
ax.set_title("frame {}".format(t))
plt.pause(0.1)
解决方案
这对你有用吗?
import numpy as np
import plotly.graph_objs as go
N = 50
M = np.random.random((N, 10, 10))
fig = go.Figure(
data=[go.Heatmap(z=M[0])],
layout=go.Layout(
title="Frame 0",
updatemenus=[dict(
type="buttons",
buttons=[dict(label="Play",
method="animate",
args=[None])])]
),
frames=[go.Frame(data=[go.Heatmap(z=M[i])],
layout=go.Layout(title_text=f"Frame {i}"))
for i in range(1, N)]
)
fig.show()
更新如果您需要添加一个Pause
按钮
fig = go.Figure(
data=[go.Heatmap(z=M[0])],
layout=go.Layout(
title="Frame 0",
title_x=0.5,
updatemenus=[dict(
type="buttons",
buttons=[dict(label="Play",
method="animate",
args=[None]),
dict(label="Pause",
method="animate",
args=[None,
{"frame": {"duration": 0, "redraw": False},
"mode": "immediate",
"transition": {"duration": 0}}],
)])]
),
frames=[go.Frame(data=[go.Heatmap(z=M[i])],
layout=go.Layout(title_text=f"Frame {i}"))
for i in range(1, N)]
)
fig.show()
推荐阅读
- oracle - 使用 EXECUTE IMMEDIATE 时 PL/SQL 块不执行结束
- r - R 中的 unnest_tokens() 创建单词列,但无法在 dplyr 命令中选择单词列
- c++ - 检查数组中是否有来自字符串的值,如果没有,则添加它
- firebase - firebase react-native auth 总是要求进行身份验证
- javascript - 为什么 new Date(yyyy-mm-dd) 显示过去的日期?
- angular - 如何忽略 TypeScript 错误 TS2339 - 类型上不存在属性
- php - 本地主机 MAMP 不从外部网页获取文件内容
- sql - 如何使用 SQL Server 将“01020304”更改为“01,02,03,04”?
- google-cloud-platform - 谷歌云函数部署失败
- python - seaborn.pairplot() 改变每个图的颜色