저는 Python의 육각 격자에서 Game of Life 클론을 만들려고했습니다. 결과를 표시하고 정기적으로 업데이트하여 애니메이션을 만들려면 hexbin
을 사용했습니다.예기치 않은 색상을 보이는 matplotlib의 Hexgrid
각 셀의 값은 0
또는 1
일 수 있으며 검은 색과 흰색 타일로 표시하려면 Greys
색상 표를 사용하고 있습니다. 그러나, 출력에서 센터 타일은 값이 1
(이 타일의 값을 확인하기 위해 print 문을 사용)으로 설정되었지만 검정 대신 회색으로 표시됩니다.
내가 어떻게 제거 할 수 있습니까? Spectral
과 같이 다른 색상 맵을 사용하면 문제가 더욱 분명 해집니다.이 경우 일부 수평선이 나타납니다. 이 문제가 나타나지 않는 사각형 격자가있는 동일한 프로젝트에 대해 거의 동일한 코드를 사용했습니다.
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib.mlab as mlab
n = 20 # number of rows
alive = 1 # value of a cell that is alive
dead = 0 # value of a dead cell
pause = False
x = y = np.arange(0, n, 1.0)
X, Y = np.meshgrid(x, y)
Z = np.zeros((n, n))
Z[10][10] = Z[9][11] = Z[10][11] = Z[9][9] = 1
x = X.ravel()
y = Y.ravel()
z = Z.ravel()
def update(*args):
if not pause:
advance()
# this is the main function that advances the animation by one frame (time step)
def advance(*args):
global Z
newZ = Z.copy()
for i in range(n):
for j in range(n):
total = (Z[i][(j-1)%n] + Z[i][(j+1)%n] + Z[(i-1)%n][j] + Z[(i+1)%n][j] + Z[(i-1)%n][(j-1)%n] + Z[(i+1)%n][(j-1)%n])
if Z[i][j] == alive:
if (total < 2) or (total > 4):
newZ[i][j] = dead
else:
if total == 2:
newZ[i][j] = alive
Z = newZ
z = Z.ravel()
grid = plt.hexbin(x, y, z, gridsize=n, cmap="Spectral")
return [grid]
fig = plt.figure(figsize=(5, 5))
ax = plt.subplot()
ani = animation.FuncAnimation(fig, update, interval=50)
plt.show()
대단히 감사합니다. 백그라운드에서 이런 일이 일어나기를 기대하지 않았습니다. 내 목표는 실제로 GoL을 적응 된 규칙으로 16 진수 그리드에서 실행하는 것입니다. 후속 질문 : 타일을 시각화하기위한 좋은 접근 방법은 무엇입니까? 개별 다각형을 통해? – andynitrox
알고리즘이 6 각형 그리드에서 실행되는 경우 시각화에 'hexbin'을 사용하면 문제가 없습니다. – ImportanceOfBeingErnest
사각형 그리드에서 육각형 그리드로 어떻게 올바르게 매핑합니까? 나는 각 열 타일을 데카르트 그리드의 한 점에 대응하는 인덱스 i, j로 식별 할 수 있습니다 (두 번째 행은 어느 정도 측면으로 이동됩니다). 그러나 나는 이것이 내가 이미했던 것이라고 생각했습니다. – andynitrox