在Python中生成热图
我想制作一张类似于这张照片的热图。不同之处在于,我希望从0和1之间的值的2d数组执行此操作 我所尝试的:在Python中生成热图,python,matplotlib,heatmap,Python,Matplotlib,Heatmap,我想制作一张类似于这张照片的热图。不同之处在于,我希望从0和1之间的值的2d数组执行此操作 我所尝试的: 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]
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])
这方面的主要问题是我无法调整gridsize来制作一张整洁的地图-大量的空白最终会产生条纹效果/等等
在任何一种情况下,我都认为有一种更好的方法来实现这一点,而不必经历繁琐的点生成
理想情况下,我希望有一些机制来决定是否绘制六边形(正如我上面所做的)
我的动机是我有一个简单的2变量马尔可夫链,其中2个变量的总和不能超过某个值,n。我有一个数组,每个初始条件都有一定的概率。因此,热图将是一个由x
import numpy as np
import matplotlib.pyplot as plt
def generate_x_y(prob_map):
s = prob_map.shape
x, y = np.meshgrid(np.arange(s[0]), np.arange(s[1]))
return x.ravel(), y.ravel()
def heatmap(prob_map):
x, y = generate_x_y(prob_map)
plt.figure()
plt.hexbin(x, y, C=prob_map.ravel())
probs = np.random.rand(200, 200)
heatmap(probs)
plt.show()
与其他功能的区别在于:
probs = np.random.rand(200, 200)
heatmap(probs)
plt.show()
从这些图中可以看出:
根据您的代码(包括条纹):
从我的代码(就像它应该是随机的):
从特定地点的cctv视频生成完整热图的命令行工具
这是一个相当复杂的问题,没有说明您迄今为止所做的尝试。你懂python吗?你只是在找人为你写代码吗?请提供更多详细信息,尤其是关于您尝试过的内容。只是一个正确方向的提示,看看matplotlib。感谢您的澄清。看起来hexbin就是你要找的,所以你走对了。你是如何得到网格大小的?你说的条纹效果是指水平条纹吗?太好了!仔细检查文档中的C参数可能会有所帮助(嗯?:)我认为你们对q的取景是“通过hexbin绘制2d图像”,这让我看到了这一点。谢谢