2013-07-25 36 views
6

Tôi đang làm việc trên một phân tích hình ảnh và tôi muốn tạo ra một hình ảnh động của kết quả cuối cùng bao gồm chuỗi thời gian của dữ liệu 2D và một chuỗi các chuỗi thời gian tại một pixel bản cập nhật lô 1D khi hoạt ảnh 2D diễn ra. Sau đó thiết lập chúng trong một subplot bên cạnh Liên kết dưới đây có một hình ảnh của kết quả cuối cùng mà lý tưởng sẽ được hoạt hình.Sử dụng matplotlib với subplots và ArtistAnimation

enter image description here

tôi tiếp tục nhận được một lỗi: AttributeError: 'danh sách' đối tượng không có thuộc tính 'set_visible'. Tôi googled nó (như bạn làm) và stumbled qua http://matplotlib.1069221.n5.nabble.com/Matplotlib-1-1-0-animation-vs-contour-plots-td18703.html nơi một guy guy đấm mã để thiết lập các thuộc tính set_visible. Thật không may, lệnh cốt truyện dường như không có thuộc tính như vậy nên tôi đang thua lỗ về cách tôi có thể tạo ra hình động. Tôi đã bao gồm các miếng vá khỉ trong ví dụ làm việc tối thiểu dưới đây (nhận xét ra) cũng như một thứ hai 'im2' đó cũng là nhận xét ra mà nên làm việc cho bất cứ ai cố gắng để chạy mã. Rõ ràng nó sẽ cung cấp cho bạn hai hình động lôgic 2D. Tối thiểu dụ làm việc là như sau:

#!/usr/bin/env python 

import matplotlib.pyplot as plt 
import matplotlib.animation as anim 
import numpy as np 
import types 

#create image with format (time,x,y) 
image = np.random.rand(10,10,10) 
image2 = np.random.rand(10,10,10) 

#setup figure 
fig = plt.figure() 
ax1=fig.add_subplot(1,2,1) 
ax2=fig.add_subplot(1,2,2) 

#set up list of images for animation 
ims=[] 
for time in xrange(np.shape(image)[1]): 
    im = ax1.imshow(image[time,:,:]) 
# im2 = ax2.imshow(image2[time,:,:]) 
    im2 = ax2.plot(image[0:time,5,5]) 
# def setvisible(self,vis): 
#  for c in self.collections: c.set_visible(vis) 
# im2.set_visible = types.MethodType(setvisible,im2,None) 
# im2.axes = plt.gca() 

    ims.append([im, im2]) 

#run animation 
ani = anim.ArtistAnimation(fig,ims, interval=50,blit=False) 
plt.show() 

Tôi cũng tò mò về việc liệu có ai biết một cách mát mẻ để làm nổi bật các điểm ảnh dữ 1D đang được chiết xuất từ, hoặc thậm chí vẽ một đường từ các điểm ảnh vào subplot ngoài cùng bên phải để chúng được 'kết nối' theo một cách nào đó.

Adrian

+1

Gợi ý ngẫu nhiên, bạn có thể sử dụng 'fig, (ax1, ax2) = plt.subplots (1, 2)' để lưu hai dòng – Mark

Trả lời

15

plot trả về một danh sách các nghệ sĩ (do vậy tại sao lỗi được đề cập đến một danh sách). Điều này là để bạn có thể gọi plot như lines = plot(x1, y1, x2, y2,...).

Thay đổi

im2 = ax2.plot(image[0:time,5,5]) 

để

im2, = ax2.plot(image[0:time,5,5]) 

Thêm dấu phẩy bỏ gói độ dài danh sách một thành im2

Đối với bạn câu hỏi thứ hai, chúng tôi cố gắng chỉ có một câu hỏi cho mỗi thread trên SO vì vậy hãy mở một câu hỏi mới.

+2

Không biết về tác giả origonal, nhưng đây là một câu trả lời tuyệt vời cho tôi. Chúc mừng. – dmon

Các vấn đề liên quan