我想生成一个类似于此答案中的热图图像。不同之处在于我想从 0 到 1 之间的二维数组中执行此操作。
我试过的:
def generate_x_y_vectors(prob_map):
multiplier = 100
xs = []
ys = []
for y in range(len(prob_map)):
for x in range(len(prob_map[y])):
count = int(prob_map[y][x] * multiplier)
xs.extend([x] * count)
ys.extend([y] * count)
return (xs, ys)
def heatmap(probabilities):
#probabilities is a 2d nxn array
n = len(probability_map)
gridsize = n + 1
(xs, ys) = generate_x_y_vectors(probability_map)
plt.figure()
plt.hexbin(xs, ys, C=None, gridsize=gridsize, mincnt=1)
plt.axis([0, n, 0, n])
这样做的主要问题是我无法调整网格大小来制作整洁的地图 - 大量空白最终会产生条纹效果 / 等等。
无论哪种情况,我都想有一种更好的方法可以做到这一点,而不必经历繁琐的积分生成!
理想情况下,我想要一些机制来限制是否绘制六边形(正如我在上面所做的那样)。
我的动机是我有一个简单的 2 变量马尔可夫链,其中 2 个变量的总和不能超过某个值 n。我有一个数组,每个初始条件都有一定的概率。所以热图将是一个由区域 x < ny 包围的三角形。