【发布时间】:2022-01-23 19:08:00
【问题描述】:
我创建了一个使用滑块播放动画的函数。每帧由条形图上方的热图(带颜色条)组成。该函数的参数由用于热图轴标签和条形图水平轴标签的文本标签列表、矩阵列表和用于条形图的列表列表组成。此外,还有一个时间窗口值,标记为win_value,因此第 0 帧对应时间 0,第 1 帧对应win_value,第 2 帧对应 2*win_value,依此类推。
函数代码如下:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib.widgets import Slider
def heatmap_barplot_animation(labels,M_list,bar_list,win_value):
num_times=len(M_list)
fig, ax = plt.subplots(2)
plt.subplots_adjust(left=None, bottom=.2, right=None, top=.9, wspace=.2, hspace=.2)
ax_time=fig.add_axes([0.25, 0.1, 0.65, 0.03])
s_time = Slider(ax_time, 'Time', 0, num_times, valinit=0,valstep=1)
def update_graph(val):
i= s_time.val
ax[0].cla()
heatmap=ax[0].imshow(M_list[i-1*1],vmin=0, vmax=1, cmap='coolwarm', aspect='auto')
ax[0].set_xticks(range(len(labels)))
ax[0].set_xticklabels(labels,fontsize=10,)
a.x[0].set_yticks(range(len(labels)))
ax[0].set_yticklabels(labels,fontsize=10)
ax0_divider = make_axes_locatable(ax[0])
cax0 = ax0_divider.append_axes('right', size='7%', pad='2%')
cb = fig.colorbar(heatmap, cax=cax0, orientation='vertical')
ax[1].cla()
ax[1].bar(labels,bar_list[i-1])
ax[1].set_ylim(0, 1)
plt.show()
s_time.on_changed(update_graph)
s_time.set_val(0)
一个包含 7 个标签、10 个帧和 0.25 秒窗口值的示例:
import random
labels=['a','b','c','d','e','f','g','h']
M_list=[np.random.rand(7,7) for i in range(10)]
bar_list=[[random.uniform(0,1) for i in range(Nc)] for t in range(Nt)]
win_value=.25
heatmap_barplot_animation(labels,M_list,bar_list,win_value)
动画的第三帧是这样的:
我似乎无法弄清楚执行以下操作需要哪些修改:
- 使条形图下方的滑块居中。
- 更改条形图滑块,使其不再显示索引(上面的 3),而是显示相应的时间值,在本例中为 0.75 秒。
【问题讨论】:
标签: python matplotlib