亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中對數組進行著色和動畫

在 Python 中對數組進行著色和動畫

開滿天機 2023-08-08 15:50:45
我正在嘗試用 Python 構建康威生命游戲的基本版本。我制作了一個 0 數組作為空白背景,用 1 替換要著色的點。但是,我無法為 0 和 1 指定顏色并同時為繪圖設置動畫。這是完整的代碼:import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimationimport numpy as np grid = np.zeros((11,11), dtype=np.int16)def neighbors(x,y):    n_cells = [grid[x-1, y+1], grid[x, y+1], grid[x+1, y+1],                 grid[x-1, y], grid[x+1, y],                 grid[x-1, y-1], grid[x, y-1], grid[x+1, y-1]]    return sum(n_cells)grid[3:6,5]=1newgrid = grid.copy()def updatefig(i):    for x in range(10):        for y in range(10):            if grid[x,y]==0:                if neighbors(x,y)==3:                    newgrid[x,y]=1            else:                if neighbors(x,y)<2 or neighbors(x,y)>3:                    newgrid[x,y]=0    return newgridfig, ax = plt.subplots()ax = plt.gca()ax.set_xticklabels([])  ax.set_yticklabels([])ax.set_xticks([])ax.set_yticks([])    plt.imshow(grid, cmap='binary') ani = FuncAnimation(fig, updatefig, interval=100)plt.show()如果我在 plt.imshow() 中使用 cmap,我必須給出一個參數,這會導致靜態繪圖并且沒有動畫。如果我不指定顏色而只運行動畫,則會出現白屏。我已經尋找解決方案并嘗試過,但沒有任何運氣。如果我可以在不使用 imshow 的情況下將顏色分配給 0 和 1,我認為它會成功。有任何想法嗎?編輯:我意識到我的循環有缺陷,它只提供 1 個更新的數組。我正在嘗試解決這個問題,但無論如何仍然需要動畫。
查看完整描述

1 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

我發現,這不是plt.imshow()和 動畫同時出現的問題,而是我的循環本身的問題。一旦修好,它就起作用了。這是代碼:


import matplotlib.pyplot as plt 

from matplotlib.animation import FuncAnimation

import numpy as np 


grid = np.zeros((11,11), dtype=np.int16) 


def neighbors(x,y):

    #cell = grid[x,y]

    n_cells = [grid[x-1, y+1], grid[x, y+1], grid[x+1, y+1], 

                grid[x-1, y], grid[x+1, y], 

                grid[x-1, y-1], grid[x, y-1], grid[x+1, y-1]]

    return sum(n_cells)


grid[3:6,5]=1


newgrid = grid.copy()

def updatefig(i):

    for x in range(10):

        for y in range(10):

            if grid[x,y]==0:

                if neighbors(x,y)==3:

                    newgrid[x,y]=1

            else:

                if neighbors(x,y)<2 or neighbors(x,y)>3:

                    newgrid[x,y]=0


    def update_grid():

        global grid

        grid = newgrid.copy()


    update_grid()


    plt.imshow(newgrid, cmap='binary')

    


ax = plt.gca()

ax.set_xticklabels([])  

ax.set_yticklabels([])

ax.set_xticks([])

ax.set_yticks([])


#plt.imshow(grid, cmap='binary') 


ani = FuncAnimation(fig, updatefig, interval=100)

plt.show() 

我已經imshow在循環內部使用了,但即使我取消注釋動畫函數上面的那個,它仍然可以工作。


查看完整回答
反對 回復 2023-08-08
  • 1 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號