【问题标题】:slicing and plotting 3D array with Python使用 Python 切片和绘制 3D 数组
【发布时间】:2013-12-05 09:48:45
【问题描述】:

我是 python 的新手,之前是 MATLAB 用户。如果我的问题很明显,我很抱歉。 我有一个包含 3D 数组 (351:467:300) 的巨大 47MB 文件。那是来自相机的 300 张图像。我想将它们重新绘制为一种动画。基本上,只需切片并绘制所有 300 张图像。这是我的代码

import numpy as np
import time
import matplotlib.pyplot as plt
import scipy.io as c
datafile = c.loadmat('data.mat') # loading data
img = datafile['img'] # extracting the (351:467:300) array 
imgShape = np.shape(img) 
for i in range(0,imgShape(2)):
    plt.imshow(img[:,:,i])
    time.sleep(0.3)
    plt.draw()

print('Done!')

问题是:当涉及到 imshow 时,图形窗口是黑色的,直到它完成循环才响应,所以我什么都看不到。如何解决这个问题?如何强制它“在线”更新?

与 matlab 相比,绘图速度非常慢(不是因为 time.sleep :) 我试过没有:))循环运行非常慢。我正在使用 Spyder,这是一个原因吗?

提前非常感谢!

【问题讨论】:

  • :尝试先用plt.draw()再用time.sleep(0.3)。行吗?
  • nope %) 它也一样

标签: python plot slice


【解决方案1】:

使用以下更正:
您需要使其具有交互性。

import numpy as np
#import time
#import matplotlib.pyplot as plt
import scipy.io as c
import pylab as pl                     #added 

datafile = c.loadmat('data.mat') # loading data
img = datafile['img'] # extracting the (351:467:300) array 
imgShape = np.shape(img) 
pl.ion()                               #added 
for i in range(imgShape(2)):           #no need for 0
    pl.cla()                           #added
    pl.imshow(img[:,:,i])
#    time.sleep(0.3) 
    pl.draw()
    pl.pause(0.3)                      #added   
pl.ioff()                              #added
print('Done!')

【讨论】:

  • 谢谢!这样可行 !我必须让自己更熟悉包!
  • 是否可以将生成的“动画”保存为“电影文件”?
  • @Vladde 保存动画的一个非常简单和通用的解决方案是将每次运行保存为图像文件(例如,在pl.draw() 之后添加pl.savefig('%05d.png'%i)),然后使用许多可用的工具,例如@987654321 @ 生成GIFAVI 等格式的动画。
猜你喜欢
  • 2021-12-12
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
相关资源
最近更新 更多