Я хочу, чтобы моя функция возвращала один < class 'matplotlib.image.AxesImage' >
тип объекта после показа двух < class 'matplotlib.image.AxesImage' >
с imshow
:Python imshow: как получить слияние двух <class 'matplotlib.image.AxesImage'> в один?
def merge_class(array1,array2):
plt.imshow(array1)
plt.imshow(array2)
return ?
Как я могу это сделать?
Я слышал, что могу сохранить всю фигуру, а затем вызвать файл в своей программе, но я хочу этого избежать.
Я также видел, что я мог бы объединить эти объекты, но я не понимаю, что они делают: Python : How to "merge" two class
EDIT 1: Я хочу знать, потому что я делаю анимацию и для одного кадра есть два слоя: изображение и над массивом.
movie.append([plt.imshow(merge_class(array1,array2), animated=True, interpolation='none', origin='lower')])
Объект в списке фильмов должен быть < class 'matplotlib.image.AxesImage' >
и если я только вернуться plt.show()
в моей функции он будет возвращать None
.
EDIT 2: Я имитирую лесной пожар.
В массиве forest
и forest_fire
:
- ни дерева = 0,0
- негорючий дерево = 1,0
- горения дерева = 2,0
set_on_fire
функция возвращает новый лес , в котором дерево в координатах (i, j) горит.
Функция check_fire
возвращает значение True, если может сжечь хотя бы одно дерево без обжига.
Функция spreading_fire
возвращает новый лес, в котором горят деревья, которые могут гореть.
Вот часть кода:
# maido is the name of a mountain and a forest
def img_maido(img_file,forest):
fig, axes = plt.subplots()
# 1) Opening the picture as an array
img_array = plt.imread(img_file)
img = np.copy(img_array[::-1,:,:]) # I flip it because it is upside down
# 2) Hiding all the 'no tree' values (0.0)
forest = np.ma.masked_where(forest == 0.0, forest) # The array is transparent at each one of the 'no tree' values position (0.0)
# 3) The 'non-burning tree' values (1.0) are green and the 'burning tree' values (2.0) are red
cmap = ListedColormap(['green','red'], 'indexed')
# 4) Displaying the array 'img' of the mountain and the array 'forest' of the forest above it
plt.imshow(forest,zorder=1, cmap=cmap, origin='lower')
plt.imshow(img,zorder=0, origin='lower')
return ? # Here is my issue
def fire_animation(img_file,forest,i,j,wind):
fig, axes = plt.subplots()
movie = []
# 1) Initialization
forest_fire = set_on_fire(forest,i,j) # I put a 'burning tree' value (2.0) in the array 'forest' at the coordinates (i,j)
movie.append([plt.imshow(img_maido(img_file,forest_fire), animated=True, cmap=cmap, interpolation='none', origin='lower')])
plt.draw()
# 2) Spread of fire
while check_fire(foret,wind):
forest_fire = spreading_fire(forest_fire,wind)
movie.append([plt.imshow(img_maido(img_file,forest_fire), animated=True, interpolation='none', origin='lower')])
plt.draw()
# 3) Animation
ani = animation.ArtistAnimation(fig, movie, interval=100, blit=True, repeat_delay=100)
plt.draw()
plt.show()
Слияние двух 'AxesImage' невозможно. Однако это также не нужно. Если вы сообщите нам, почему вы хотите, и что вы ожидаете, что результат будет выглядеть, обязательно будет решение. – ImportanceOfBeingErnest
Создание фильма не должно быть проблемой даже с большим количеством художников. Можете ли вы показать, как вы снимаете фильм ?. Лучше всего показать [MCVE], который работает для одного изображения, и не удается выполнить два изображения с комментариями в коде, где у вас проблемы. – ImportanceOfBeingErnest
Я отредактировал вопрос. Надеюсь, мой английский достаточно хорош. –