2017-08-10 5 views
0

しないスケール:あなたがbinomの最大値は0.099300であり、参照としてmatplotlibのy軸は、私が二項分布の確率質量関数をプロットフィッティング値

fig=plt.figure(figsize=(10,10)) 
binom=[scs.binom.pmf(k,100,0.2) for k in range(100)] 
print(np.max(binom)) #0.0993002148088 
[plt.axvline(k,ymax=scs.binom.pmf(k,100,0.2)) for k in range(100)] 
plt.ylim(ymax=0.1) 

plt.show() 

プロットがほぼ上限に達しなければならない意味y軸が、次のように結果は次のとおりです。

enter image description here

だから私は間違って何をやっていますか?グラフが限界に合わないのはなぜですか?

答えて

2

stem plotとお考えください。

import matplotlib.pyplot as plt 
import numpy as np 
import scipy.stats as scs 

fig=plt.figure(figsize=(10,10)) 
binom=[scs.binom.pmf(k,100,0.2) for k in range(100)] 

# Scale the yvalues by ymax 
plt.stem(binom, linefmt='b-', markerfmt='none', basefmt='none') 

plt.show() 

enter image description here

1

ymaxの場合、axvlineは0〜1の範囲の値を受け入れます(つまり、データ座標ではなく軸座標になります)。

ymax:スカラー、オプション、デフォルト:ドキュメントから1

は、プロット、1プロットの最上部の下部さ0と1、0の間であるべきです。

だから、軸の上に0.1程度のプロットしかしないように指示しています。 axvlineを使用してプロットを作成する場合は、プロットする前に値をスケーリングする必要があります。

fig=plt.figure(figsize=(10,10)) 
binom=[scs.binom.pmf(k,100,0.2) for k in range(100)] 
print(np.max(binom)) #0.0993002148088 
# Set ymax here 
ymax = 0.1 
# Scale the yvalues by ymax 
[plt.axvline(k,ymax=scs.binom.pmf(k,100,0.2)/ymax) for k in range(100)] 
# Use ymax again here 
plt.ylim(ymax=ymax) 

plt.show() 

また、あなたはこのプロットを作るためにplt.barを使用してに見たいと思うかもしれません。たとえば、

plt.bar(range(len(binom)), binom) 
+0

[OK]を私は再スケールymaxの値は、それぞれの時間を持っていた場合、これは非常に便利ではありません。では、どうすればplt.bar()を使って解決できますか? – 2Obe

+0

のようなものです: 'plt.bar(range(len(binom)、binom)'はそれを行うべきです – tom

関連する問題