Python 使用matshow的matplotlib热图

Python 使用matshow的matplotlib热图,python,matplotlib,data-visualization,heatmap,Python,Matplotlib,Data Visualization,Heatmap,我正在尝试生成10x10矩阵的热图。矩阵中的所有值都是概率;所有元素之和等于1.0。我决定使用matshow绘图类型(似乎很容易使用),但是我无法生成到目前为止想要的输出 1.从视觉上看,它看起来有点难看。你会推荐一个适合热图的颜色图吗 2.使用matshow时,是否有方法将预定义的箱子分配给颜色贴图?例如,采用1000种颜色的渐变,对相应的概率始终使用相同的颜色。在默认行为中,我认为matshow会检查最小值和最大值,将渐变中的第一个和最后一个颜色指定给这些值,然后通过插值对中间的值着色 有时

我正在尝试生成10x10矩阵的热图。矩阵中的所有值都是概率;所有元素之和等于1.0。我决定使用matshow绘图类型(似乎很容易使用),但是我无法生成到目前为止想要的输出

1.从视觉上看,它看起来有点难看。你会推荐一个适合热图的颜色图吗

2.使用matshow时,是否有方法将预定义的箱子分配给颜色贴图?例如,采用1000种颜色的渐变,对相应的概率始终使用相同的颜色。在默认行为中,我认为matshow会检查最小值和最大值,将渐变中的第一个和最后一个颜色指定给这些值,然后通过插值对中间的值着色

有时我在矩阵中有非常相似的概率,而其他时候概率的范围可能很大。由于我试图在上面解释的默认行为,我得到了类似的图,这使得比较更加困难

顺便说一下,下面是我生成上述热图(以及示例图)的代码

谢谢

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

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)

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

第二个问题可以使用
matshow
函数的
vmin
vmax
参数来解决:

matshow(board_prob, cmap=cm.Spectral_r, interpolation='none', vmin=0, vmax=1)
考虑到你的第一个问题,这取决于你想强调什么或显示什么。从中选择合适的颜色贴图