Python使用pyplot slider和子批处理

2024-09-28 01:25:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python比较陌生,所以请原谅这是一个愚蠢的初学者错误。不过,我已经挣扎了一段时间了。 我想创建一个有n x m子图的图形,每个子图都是np.数组形状[10242642264]。当我在沿着0维查找堆栈中发生的差异时,我想使用一个滑块同时浏览我的图形中的所有堆栈。 slider实例对于一个只有一个子图的图形很好地工作,但是我不能让它们全部工作。 这就是我使用的代码:

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(更小的)数组。 有趣的是,滑块仅在倒数第二个子批次上可操作。然而,我不知道如何将其与所有子批次同时链接起来。也许有人知道怎么做。 提前谢谢你

提尔曼


Tags: fromimport图形matplotlib堆栈npfigplt
1条回答
网友
1楼 · 发布于 2024-09-28 01:25:42

您需要将每个imshowAxesImage存储在一个列表中,并在update内部循环,然后根据滑块更新每个轴

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()

相关问题 更多 >

    热门问题