1

この回答にあるようなヒートマップ画像を作成したいと思います。違いは、0から1までの値の2次元配列から実行したいということです。

私が試したこと:

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つの変数の合計がある値nを超えることができない単純な2変数マルコフ連鎖を持っていることです。初期条件ごとにある程度の確率の配列があります。したがって、ヒートマップは、領域x<nyで囲まれた三角形になります。

4

2 に答える 2

3

コードで何をしたいのかよくわかりません。私はそれを次のように読みました:

「hexbinを介して2D画像を表示する」。

「六角形を表示するかどうかのしきい値」の部分は、hexbinのmincntパラメーターのように見えます。('Noneでない場合は、セル内のポイント数が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()

これらの図で見ることができます:あなたのコードから(ストライプを含む):

ここに画像の説明を入力してください

私のコードから(あるべきようにランダムに):

ここに画像の説明を入力してください

于 2011-09-11T06:35:38.383 に答える
0

特定の場所のcctvビデオからコマンドラインツールを生成する完全なヒートマップ。

https://github.com/ajayrawat12/generate_heatmap

于 2019-01-08T17:39:10.007 に答える