2014-02-03 3 views
7

Я пытаюсь создать тепловую карту матрицы 10x10. Все значения в матрице - это вероятности; сумма всех элементов, равная 1,0. Я решил использовать тип графика matshow (он казался простым в использовании), однако я не могу сгенерировать вывод, который хотел бы иметь до сих пор.Heatmap с matplotlib с использованием matshow

1.Визуально это выглядит как-то уродливо. Вы порекомендовали бы подходящую цветовую карту для использования в тепловой карте?

2. Есть ли способ назначить предопределенные ячейки карте цветов при использовании matshow? Например. возьмите градиент 1000 цветов, всегда используйте одни и те же цвета для соответствующих вероятностей. В поведении по умолчанию я думаю, что matshow проверяет минимальные и максимальные значения, назначая первый и последний цвета в градиенте для этих значений, а затем окрашивает значения между интерполяциями.

Иногда у меня очень похожие вероятности в матрице, а в других случаях диапазон вероятностей может быть большим. Из-за поведения по умолчанию, которое я попытался объяснить выше, я получаю похожие графики, что усложняет сравнение.

Мой код для создания указанных тепловых карт (и примерный график) внизу, кстати.

Спасибо!

import bumpy as np 

def pickcoord(): 
    i = np.random.randint(0,10) 
    j = np.random.randint(0,10) 
    return [i,j] 

board = np.zeros((10,10)) 
for i in range(1000000): 

    try: 
     direction = np.random.randint(0,2) 
     new_board = np.zeros((10,10)) 
     coords = pickcoord() 

     if direction == 1: 
      for k in range(2): 
       new_board[coords[0]][coords[1]+k] = 1 
     else: 
      for k in range(2): 
       new_board[coords[0]+k][coords[1]] = 1 

    except IndexError: 
     new_board = np.zeros((10,10)) 

    board = board + new_board 

board_prob = board/np.sum(board) 

figure(figsize(6,6)) 
matshow(board_prob, cmap=cm.Spectral_r, interpolation='none') 
plt.xticks(np.arange(0.5,10.5), []) 
plt.yticks(np.arange(0.5,10.5), []) 
plt.grid() 

enter image description here

ответ

6

Ваша вторая проблема может быть решена с помощью vmin и vmax аргументов функции matshow:

matshow(board_prob, cmap=cm.Spectral_r, interpolation='none', vmin=0, vmax=1) 

Учитывая вашу первую проблему, это зависит от того, что вы хотите, чтобы подчеркнуть или дисплей. Выберите подходящую цветочную карту от default colormaps of matplotlib.

+0

спасибо, 'vmin' и' vmax' сделали трюк! – marillion

Смежные вопросы