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