使用matshow的matplotlib热图

时间:2014-02-03 04:31:00

标签: python matplotlib data-visualization heatmap

我正在尝试生成10x10矩阵的热图。矩阵中的所有值都是概率;所有元素的总和等于1.0。我决定使用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

1 个答案:

答案 0 :(得分:6)

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

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

考虑到您的第一个问题,这取决于您想要强调或显示的内容。从default colormaps of matplotlib中选择适合的色彩映射。