繁体   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