Python 将 pyplot 滑块与子图一起使用

Python Using pyplot slider with subplots

我是 Python 的新手,所以如果这是一个愚蠢的初学者错误,请原谅。但是我已经为此苦苦挣扎了一段时间。 我想创建一个包含 n x m 个子图的图形,每个子图的形状为 np.array [1024,264,264]。当我沿着 0 维寻找堆栈中发生的差异时,我想使用滑块同时探索图中的所有堆栈。 滑块实例非常适用于具有一个子图的图形,但我无法将它们全部用于工作。 那是我正在使用的代码:

import os
from matplotlib import pyplot as plt
import numpy as np

import glob
import h5py
#Define the xy size of the mapped array
xsize=3
ysize=3

lengthh5=9
readlist=[]
for i in range (0,lengthh5):
    npraw=np.random.rand(200,50,50)
    readlist.append (npraw)

''' Slider visualization'''
from matplotlib.widgets import Slider
fig=plt.figure()
for k in range (0,lengthh5):
    ax=fig.add_subplot(xsize,ysize,k)        
    frame = 10
    l = ax.imshow(readlist[k][frame,:,:]) 
    plt.axis('off')
           sframe = Slider(fig.add_subplot(50,1,50), 'Frame', 0, len(readlist[0])-1, valinit=0)
    def update(val):
        frame = np.around(sframe.val)
        l.set_data(readlist[k][frame,:,:])


sframe.on_changed(update)

plt.show()

对于这个特殊情况,我将它简化为我的图形的 3x3 数组,并只创建 randmom(较小的)数组。 有趣的是,滑块只能在倒数第二个子图中操作。但是我真的不知道如何 link 它模拟到所有子图。也许有人知道如何做到这一点。 非常感谢,

拍摄者

您需要将每个 imshow AxesImage 存储在列表和内部更新中,遍历所有这些并根据滑块更新每个,

import os
from matplotlib import pyplot as plt
from matplotlib.widgets import Slider
import numpy as np

import glob
import h5py
#Define the xy size of the mapped array
xsize=3
ysize=3

lengthh5=9
readlist=[]
for i in range (0,lengthh5):
    npraw=np.random.rand(200,50,50)
    readlist.append (npraw)

fig=plt.figure()
ls = []
for k in range (0,lengthh5):
    ax=fig.add_subplot(xsize,ysize,k)        
    frame = 10
    l = ax.imshow(readlist[k][frame,:,:]) 
    ls.append(l)
    plt.axis('off')

sframe = Slider(fig.add_subplot(50,1,50), 'Frame', 
                0, len(readlist[0])-1, valinit=0)

def update(val):
    frame = np.around(sframe.val)
    for k, l in enumerate(ls):
        l.set_data(readlist[k][frame,:,:])

sframe.on_changed(update)
plt.show()