[英]Matplotlib y axis scale not fitting values
我用以下公式繪制二項式分布的概率質量函數:
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()
如您所見,binom的最大值為0.099300,這意味着該圖應該幾乎達到y軸的上限,但結果如下:
那我在做什么錯? 為什么圖形不符合限制?
我認為您可能要使用stem
圖 。
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()
的問題是, axvline
接受范圍為0值以1 ymax
(即,它是在軸的坐標,而不是數據坐標)。 從文檔:
ymax
:標量,可選,默認值:1應該在0到1之間,0是曲線的底部,1是曲線的頂部。
因此,您要告訴它僅沿軸的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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.