Анимация 3D-массива «по слоям» [дубликат]

Вот решение, использующее DictVectorizer и метод Pandas DataFrame.to_dict('records').

>>> import pandas as pd
>>> X = pd.DataFrame({'income': [100000,110000,90000,30000,14000,50000],
                      'country':['US', 'CAN', 'US', 'CAN', 'MEX', 'US'],
                      'race':['White', 'Black', 'Latino', 'White', 'White', 'Black']
                     })

>>> from sklearn.feature_extraction import DictVectorizer
>>> v = DictVectorizer()
>>> qualitative_features = ['country','race']
>>> X_qual = v.fit_transform(X[qualitative_features].to_dict('records'))
>>> v.vocabulary_
{'country=CAN': 0,
 'country=MEX': 1,
 'country=US': 2,
 'race=Black': 3,
 'race=Latino': 4,
 'race=White': 5}

>>> X_qual.toarray()
array([[ 0.,  0.,  1.,  0.,  0.,  1.],
       [ 1.,  0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  1.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  1.],
       [ 0.,  1.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  1.,  1.,  0.,  0.]])
2
задан Leo 11 September 2013 в 15:16
поделиться

3 ответа

Я реализовал удобный сценарий, который вам подходит. Попробуйте здесь

Для вашего примера:

imagelist = YOUR-IMAGE-LIST
def redraw_fn(f, axes):
    img = imagelist[f]
    if not redraw_fn.initialized:
        redraw_fn.im = axes.imshow(img, animated=True)
        redraw_fn.initialized = True
    else:
        redraw_fn.im.set_array(img)
redraw_fn.initialized = False

videofig(len(imagelist), redraw_fn, play_fps=30)
0
ответ дан Bily 17 August 2018 в 16:11
поделиться

Вы работаете в интерактивном сеансе python в Spyder? Если это так, вам может потребоваться запустить

    %matplotlib qt

. Чтобы убедиться, что анимация открывается в своем собственном окне, а не отображается в строке (она не работает встроенно).

Также убедитесь, что вы не падаете на вызывающую анимацию. FuncAnimation внутри функции function

2
ответ дан Community 17 August 2018 в 16:11
поделиться

Копирование почти точно с вашей первой ссылки (и добавления комментариев):

hmpf = ones([4,4])
hmpf[2][1] = 0
imagelist = [ hmpf*i*255./19. for i in range(20) ]

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure() # make figure

# make axesimage object
# the vmin and vmax here are very important to get the color map correct
im = plt.imshow(imagelist[0], cmap=plt.get_cmap('jet'), vmin=0, vmax=255)

# function to update figure
def updatefig(j):
    # set the data in the axesimage object
    im.set_array(imagelist[j])
    # return the artists set
    return [im]
# kick off the animation
ani = animation.FuncAnimation(fig, updatefig, frames=range(20), 
                              interval=50, blit=True)
plt.show()

Это оживляет, как я ожидаю,

5
ответ дан tacaswell 17 August 2018 в 16:11
поделиться
  • 1
    Так что мне не нужна функция init? Это выполняется без ошибок, однако я не вижу анимацию, просто первое изображение. – Leo 11 September 2013 в 16:20
  • 2
    попробуйте удалить blit=True – tacaswell 11 September 2013 в 16:39
  • 3
    это шоу и анимация для вас? Я вижу только первое изображение. hmpf = ones ([4,4]), hmpf [2] [1] = 0, imagelist = [hmpf * i * 255. / 19. для i в диапазоне (20)] создает список массивов, которые вы можете использовать. – Leo 11 September 2013 в 16:56
  • 4
    (python3 не уверен для 2): вы ДОЛЖНЫ назначить анимацию. FuncAnimation для переменной. Удаление ani = сделает анимацию не выполненной. – Kevin Kostlan 10 December 2015 в 17:33
  • 5
    Я получаю & quot; Объект AxesImage не является итерируемым & quot; и "Исключение в обратном вызове Tkinter" с предоставленным кодом, но это исправлено, изменив updatefig, чтобы вернуть [im] вместо im. – Greg 8 May 2017 в 23:29
Другие вопросы по тегам:

Похожие вопросы: