2016-09-22 6 views
3

私は熱物理学のプロジェクトに取り組んでいます。そのために、ヒストグラムと滑らかな曲線を比較する必要があります。Pythonヒストグラムは厳密解の右辺にあります

Figure 1

私は曲線が途中かかわらず行きたい:私の問題は、ヒストグラムが曲線のために右側に配置されていることである(曲線がバーの左上隅かかわら行く一貫しています)それはすべきであるように、バーの上部。それはちょっとしたもののように見えるかもしれませんが、本当に私を苛立たせます。私は誰かが私を助けることを願っています

プログラムは次のようになります。

import numpy as np 
import matplotlib.pyplot as plt 

#--Constants-- 
M = 20  # Jmax 
N = 1000 # Number of J values 
T = 50  # Actually T/theta_r 

J1 = np.linspace(0,M,N) 
J2 = np.linspace(0,M,M+1) 

#--Calculate z-- 
def z(J): 
    return(2*J+1)*np.exp(-J*(J+1)/T) 

#--Plot-- 
width = .9       #Width of columns 
plt.bar(J2, z(J2), width=width)  #Plotting histogram 
#plt.xticks(ind + width/2, ind)  #Replacing the indexes under the columns 
plt.plot(J1,z(J1),'-r', linewidth=2) 
SZ={'size':'16'} 
plt.title('Different terms $z(j)$ plotted as function of $j$',**SZ) 
plt.xlabel('$j$',**SZ) 
plt.ylabel('$z(j)$',**SZ) 
plt.show() 
+0

z(J2)のあなたのプロットに合わせて各バーの中央を作成するには、マイナスの半分でエッジの位置をオフセットするためにバー幅を必要としますバーが置かれています!粒度を増やしてより多くのバーをプロットすると、ピュア全体が変化することがわかります。 try 'width = .7'?詳細な説明:1つのバーをプロットするために使用されるデータが均等に分散されていない。その '.9'の範囲内のデータの"内部 "のピークに応じて、プロットしているカーブはバーの真中に完全にはありません... – phynfo

答えて

3

plt.barへの最初の引数が左側のエッジ各バーについての位置を指定します。私は、この「問題」が道に接続されていると思います

plt.bar(J2 - 0.5 * width, z(J2), width=width) 
+3

また、キーワードオプション' align =左端の代わりにバー中心の座標として「J2」を解釈する 'center'となる。 – wflynny

+0

@wflynny良い点、私はそのことについて忘れていただろう –

関連する問題