2012-02-29 8 views
11

numpy配列で整理された3組のデータを生成しました。私は、これらの3つのデータセットの確率分布を正規化されたヒストグラムとしてプロットすることに興味があります。すべての3つのディストリビューションはほぼ同じに見えるはずですので、比較を容易にするため、3つのディストリビューションをすべて同じ軸にプロットするのが合理的です。1軸上に3つのヒストグラムを読みやすい形で表示 - matplotlib

デフォルトでは、matplotlibのヒストグラムは棒グラフとしてプロットされています。この棒グラフは、私が見たい画像を非常に乱雑にします。したがって、私の質問は、pyplot.histが、同じグラフ上に3つのディストリビューションをすべてきれいに表示できるように、バーの上端がデフォルトのフォームになるボックス/円/三角形を描くようにすることが可能かどうかです。ヒストグラムデータを計算し、それを散布図として別々にプロットする必要があります。

ありがとうございます。

+1

データが複数回にまたがる可能性があるため、最終的にどのようなメソッドを使用するにしても、「アルファ」パラメータ(透過性)を持たせることができます。 – Hooked

答えて

19

3つのヒストグラムを並行してプロットする方法は2通りありますが、どちらもあなたの求めるものではありません。あなたが聞いたことをするには、ヒストグラムを計算する必要があります。 numpy.histogramを用いて、plot方法を用いてプロットする。 scatterは、ポイントごとにサイズを設定して、ポイントに他の情報を関連付ける場合にのみ使用してください。

histを使用する最初の代替方法では、3つのデータセットすべてを一度にhistメソッドに渡すことが含まれます。 histメソッドは、3つのセットすべてが明確に表示されるように、各バーの幅と配置を調整します。

2番目の選択肢は、histtype='step'オプションを使用することです。これにより、各セットの明瞭なプロットが作成されます。

import numpy as np 
import matplotlib.pyplot as plt 

np.random.seed(101) 
a = np.random.normal(size=1000) 
b = np.random.normal(size=1000) 
c = np.random.normal(size=1000) 

common_params = dict(bins=20, 
        range=(-5, 5), 
        normed=True) 

plt.subplots_adjust(hspace=.4) 
plt.subplot(311) 
plt.title('Default') 
plt.hist(a, **common_params) 
plt.hist(b, **common_params) 
plt.hist(c, **common_params) 
plt.subplot(312) 
plt.title('Skinny shift - 3 at a time') 
plt.hist((a, b, c), **common_params) 
plt.subplot(313) 
common_params['histtype'] = 'step' 
plt.title('With steps') 
plt.hist(a, **common_params) 
plt.hist(b, **common_params) 
plt.hist(c, **common_params) 

plt.savefig('3hist.png') 
plt.show() 

そして、ここでは結果のプロットである:

enter image description here

あなたにも、オブジェクト指向のインターフェイスですべてこれを行うことができます覚えておいて、ここで

はこれを実証するスクリプトがあります例えば個々のサブプロットを作成するなど

+0

ありがとうございました。あなたが示唆したようにnumpy.histogramを発見したところ、完璧に仕事をしました!非常に助けを感謝します。 – Zykx