Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中生成热图_Python_Matplotlib_Heatmap - Fatal编程技术网

在Python中生成热图

在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]

我想制作一张类似于这张照片的热图。不同之处在于,我希望从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][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我不确定您想对代码做什么。 我把它读作:

“通过hexbin显示二维图像”

“是否显示六边形的阈值”部分看起来像hexbin中的mincnt参数。(“如果不是无,则仅显示单元格中点数超过mincnt的单元格”)。对于更复杂的事情,您应该从x,y,C生成屏蔽数组

这就是你想做的吗?如果是这样,下面的代码应该为您提供一个起点:

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图像”,这让我看到了这一点。谢谢