ポアソン分布のグラフを実装していたところ平均値であるλが10の時だけグラフの点がうまく表示されません。具体的には下の二つの図が違うという事です。(最後の方が違う)
内部的な点の値はあっているのですが点がプロットされない原因が分かる方、教えて下さると光栄です。プログラムも載せておきます。
ここからはコードを載せます。
Python
1#λは平均, kはその時の値。 2#つまりポアソン分布は平均λの場合にkの値が出る確率 3def poason(k, λ): 4 if type(k)==int: 5 sum=1 6 for j in range(1,k+1): 7 sum = sum*j 8 return np.e**(-λ)*(λ**k)/sum 9 else: 10 a = np.zeros(len(k)) #aを作らずにkに代入しても良いがkはnp.arangeで作っているため整数しか入らない. そのためaを作成 11 for i in range(len(k)): 12 sum = 1 13 for j in range(1,k[i]+1): 14 sum = sum*j 15 a[i]=np.e**(-1*λ)*(λ**k[i])/sum 16 return a 17 18 19import matplotlib.pyplot as plt 20import numpy as np 21 22fig, ax = plt.subplots(figsize=(10,6)) 23 24k = np.arange(21) 25p1 = poason(k, 1) #λが1の場合のグラフ 26p2 = poason(k, 4) #λが4の場合のグラフ 27p3 = poason(k,10) #λが10の場合のグラフ 28 29c1, c2, c3 = "blue", "green", "red" #各プロットの色 30l1, l2, l3 = "λ=1", "λ=4", "λ=10" #各ラベル 31 32ax.set_xlabel("k", fontsize=20) #x軸ラベル 33ax.set_ylabel("p(x=k)", fontsize=20) #y軸ラベル 34ax.set_title("Poisson distribution", fontsize=20) #グラフタイトル 35 36ax.grid() #罫線(けいせん)。縦と横の細い線 37 38ax.plot(k, p1, marker = "o", color = c1, label = l1) 39ax.plot(k, p2, marker = "o", color = c2, label = l2) 40ax.plot(k, p3, marker = "o", color = c3, label = l3) 41 42#xの目盛りを作る(まあ作らなくても良いがfigsizeなど指定するには必要)目盛りの大きさのみ変えるだけなら一行で書ける。yは一行。 43i=0 44xtick = np.zeros(1) 45while (i<21): 46 if i%5==0: 47 xtick = np.append(xtick,i) 48 i +=1 49 50ax.set_xticks(xtick) #これでx軸の目盛りの個数と大きさは分かった。z残念ながらここにfontizeはない 51ax.set_xticklabels(xtick, fontsize=15) #第一引数はラベルであるので"A"などの名前でも良い。ここでfontsize指定できる 52 53ax.tick_params(axis='y',labelsize=15) #このように目盛りの大きさだけならこれで変えられる 54 55ax.legend(loc=0, fontsize=20) #凡例表示。線の説明。locは場所。0の場合は右上 56fig.tight_layout() 57 58plt.show()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/28 09:57