2017-06-27 5 views
2

与えられたヒストグラムは、私は例を準備:パイソン:プロットは、私の問題を説明するために数(周波数)とビン

まず、私は2つのアレイ「A 'および」を持っているb'and私は彼らに興味ディストリビューション:

import numpy as np 
import matplotlib.pyplot as plt    
a = np.array([1,2,2,2,2,4,8,1,9,5,3,1,2,9])     
b = np.array([5,9,9,2,3,9,3,6,8,4,2,7,8,8])     
n1,bin1,pat1 = plt.hist(a,np.arange(1,10,2),histtype='step')   
n2,bin2,pat2 = plt.hist(b,np.arange(1,10,2), histtype='step')   
plt.show() 

このコードでは、2つの「曲線」を持つヒストグラムが得られます。今、私は他から1「曲線」を減算したい、これによって私は私が個別に各ビンのためにこれを行うことを意味:

n3 = n2-n1 

私は負の数を必要としない:

for i in range(0,len(n2)):  
    if n3[i]<0:  
     n3[i]=0  
    else:  
     continue  

新しいヒストグラム曲線は前のものと同じ範囲にプロットし、同じ数のビンを持つ必要があります。したがって、私はビンの数とその位置(上記のブロックを参照してください他のカーブのものと同じになります)と、すべてのビンが持つべき頻度またはカウント(n3)を持っています。私が持っているデータでこれをどうやってやることができるか考えていますか?

答えて

1

ステップ関数を使用して、n3 = n2 - n1をプロットすることができます。唯一の問題は、もう1つの値を提供する必要があることです。そうでなければ、最後の値はうまく表示されません。また、step機能のwhere="post"オプションを使用する必要があります。

import numpy as np 
import matplotlib.pyplot as plt    
a = np.array([1,2,2,2,2,4,8,1,9,5,3,1,2,9])     
b = np.array([5,9,9,2,3,9,3,6,8,4,2,7,8,8])     
n1,bin1,pat1 = plt.hist(a,np.arange(1,10,2),histtype='step')   
n2,bin2,pat2 = plt.hist(b,np.arange(1,10,2), histtype='step')   

n3=n2-n1 
n3[n3<0] = 0 

plt.step(np.arange(1,10,2),np.append(n3,[n3[-1]]), where='post', lw=3) 

plt.show() 

enter image description here

+0

これは私の問題を解決し、あなたの答えをありがとうございました:) – Jasmina

関連する問題