我正在尝试生成一个10x10矩阵的热力图。矩阵中的所有值都是概率,所有元素之和等于1.0。我决定使用matshow绘图类型(它似乎很容易使用),但是到目前为止我无法生成我想要的输出。
1.从视觉上看,它看起来有点丑陋。您会推荐适合在热力图中使用的配色方案吗?
2.在使用matshow时,是否有一种方法可以将预定义的bin分配给颜色映射?例如,取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()