Python Matplotlib y轴比例未拟合值
我用以下公式绘制二项分布的概率质量函数:Python Matplotlib y轴比例未拟合值,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我用以下公式绘制二项分布的概率质量函数: 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() 如您所见,bi
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轴的上限,但结果如下:
那么我做错了什么?为什么图形不符合极限?问题在于,对于ymax
,接受0到1范围内的值(即,它在轴坐标中,而不是数据坐标中)。从文档中:
ymax
:标量,可选,默认值:1
应介于0和1之间,0为绘图底部,1为绘图顶部
因此,您告诉它只在轴的上方0.1处绘制。如果您希望继续使用axvline
进行绘图,则需要在绘图之前缩放值
e、 g
或者,您可能希望使用plt.bar
绘制此图;例如:
plt.bar(range(len(binom)), binom)
问题在于,对于ymax
,接受0到1范围内的值(即,它位于轴坐标中,而不是数据坐标中)。从文档中:
ymax
:标量,可选,默认值:1
应介于0和1之间,0为绘图底部,1为绘图顶部
因此,您告诉它只在轴的上方0.1处绘制。如果您希望继续使用axvline
进行绘图,则需要在绘图之前缩放值
e、 g
或者,您可能希望使用plt.bar
绘制此图;例如:
plt.bar(range(len(binom)), binom)
我想你可能想用一个
我想您可能需要使用一个
可以,但如果每次都要重新缩放ymax值,这不是很方便。那么我如何使用plt.bar()来解决它呢?类似于:
plt.bar(range(len(binom),binom)
应该这样做,但是如果每次都要重新缩放ymax值,这不是很方便。那么我如何使用plt.bar()来解决它呢?类似于:plt.bar(range(len(binom),binom)
应该这样做
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()