Визуализация платы с помощью imshow, затем визуализация обновленной версии этой платы (так что есть 2 выхода) - PullRequest
0 голосов
/ 10 марта 2019

Работа в Python 3.7 на ноутбуке Jupyter.У меня есть следующие 3 встроенные функции.Первый, set_board (), создает массив случайных чисел (в данном случае 0 или 1).Второй, VisMap (), просто возвращает созданную вами доску в виде изображения, используя plt.imshow.Третий, startRumor (), в основном меняет одно из значений в середине массива.Все очень простые вещи, прекрасно работающие.

def set_board(height=5,width=10,density=.75):
    city = np.zeros((height,width),dtype='int64')
    for i in range(height):
        for j in range(width):
            if rand.random() <= density:
                city[i,j] = 1
    return city

def VisMap(Map=set_board(),Colors=plt.cm.RdYlGn):
    MapVis = plt.imshow(Map, Colors)
    return MapVis

def startRumor(board):
    height, width = board.shape 
    height_quarters = int(height/4)
    width_quarters = int(width/4)
    starting_middle_height_index = height_quarters 
    ending_middle_height_index = 3*height_quarters 
    starting_middle_width_index = width_quarters 
    ending_middle_width_index = 3*width_quarters 
    found_starting_point = False
    if np.all(board[starting_middle_height_index:ending_middle_height_index, starting_middle_width_index:ending_middle_width_index] == 0):
        i = rand.randint(starting_middle_height_index, ending_middle_height_index)
        j = rand.randint(starting_middle_width_index, ending_middle_width_index)
        board[i,j] = 2
        found_starting_point = True

    while not found_starting_point:
        i = rand.randint(starting_middle_height_index, ending_middle_height_index)
        j = rand.randint(starting_middle_width_index, ending_middle_width_index)
        if board[i,j] == 1:
            found_starting_point = True
            board[i, j] = 2

Моя проблема: мне нужно инициализировать плату, визуализировать эту плату, а затем использовать функцию startRumor (), чтобы изменить одно из значений в массиве (таким образом,придание изображению доски зеленой точки в середине), а также визуализировать эту новую доску.Поэтому следующая ячейка должна возвращать одно изображение без зеленой точки и второе изображение с зеленой точкой.Я пытался использовать подсюжеты и axxarr - ни один не работал для меня.Я получаю ошибки, говоря: «данные изображения не могут быть преобразованы в плавающее».То, как написано сейчас, возвращает только окончательную версию платы с зеленой точкой на ней.

TestBoard2 = set_board(10,10,.1)
VisMap(TestBoard2) #this one is not showing
startRumor(TestBoard2)
VisMap(TestBoard2)
...