簡體   English   中英

Matplotlib y軸刻度不適合值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM