42

Matplotlib を使用して、事前にカウントされたデータのヒストグラムをプロットしたいと思います。たとえば、生データがあるとします

data = [1, 2, 2, 3, 4, 5, 5, 5, 5, 6, 10]

このデータがあれば、使用できます

pylab.hist(data, bins=[...])

ヒストグラムをプロットします。

私の場合、データは事前​​にカウントされており、辞書として表されています。

counted_data = {1: 1, 2: 2, 3: 1, 4: 1, 5: 4, 6: 1, 10: 1}

理想的には、この事前にカウントされたデータを、あたかも生データを渡したかのように、ビンの幅、プロット範囲などを制御できるヒストグラム関数に渡したいと思います。回避策として、カウントを生データに拡張しています。

data = list(chain.from_iterable(repeat(value, count)
            for (value, count) in counted_data.iteritems()))

counted_dataこれは、数百万のデータ ポイントのカウントが含まれている場合には非効率的です。

Matplotlib を使用して、事前にカウントされたデータからヒストグラムを作成する簡単な方法はありますか?

または、事前にビニングされたデータをバープロットするのが最も簡単な場合、アイテムごとのカウントをビニングされたカウントに「ロールアップ」する便利な方法はありますか?

4

5 に答える 5

32

weightsキーワード引数 to np.histgram(plt.hist下で呼び出す)を使用できます。

val, weight = zip(*[(k, v) for k,v in counted_data.items()])
plt.hist(val, weights=weight)

キーとして整数のみがあると仮定すると、次をbar直接使用することもできます。

min_bin = np.min(counted_data.keys())
max_bin = np.max(counted_data.keys())

bins = np.arange(min_bin, max_bin + 1)
vals = np.zeros(max_bin - min_bin + 1)

for k,v in counted_data.items():
    vals[k - min_bin] = v

plt.bar(bins, vals, ...)

where ... は、渡したい引数ですbar (doc)

データを再ビン化する場合は、頻度を示す別のリストを含むヒストグラムを参照してください

于 2013-10-06T18:58:34.220 に答える