Python使用带有子图的pyplot滑块

时间:2015-07-06 13:51:28

标签: python matplotlib slider matplotlib-widget

我对Python很新,所以请原谅这是一个愚蠢的初学者错误。但是我在相当一段时间内一直在努力。 我想用n x m个子图创建一个图形,每个子图形都是形状为[1024,264,264]的np.array。当我在寻找沿着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(较小)数组。 滑块仅可在第二个最后一个子图上操作。但是我不知道如何将它与所有子图同时联系起来。也许有人知道如何做到这一点。 非常感谢,

蒂尔曼

1 个答案:

答案 0 :(得分:0)

您需要将每个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()