我使用matplot fill_between,在高斯曲线中绘制一个区域,但其中一个区域没有到达指定位置,我不知道为什么会发生这种情况,这是我的代码,我包含了一些plt.annote箭头,以清楚地表明fill_between函数没有到达指定位置:这是有问题的线路:ax.fill_between(x,0,y,where=(x<=especificacion),color='red',alpha=0.4)
下面是代码的重要部分:
from scipy.stats import norm
fig,ax=plt.subplots(figsize=(10,8))
mean=29.02
std=4.01
especificacion=23.52
def gaussian_curve(x,mu,sigma):
return norm.pdf(x,loc=mu,scale=sigma)
#GraficarcadacurvadeGaussyagregarunaleyenda
x=np.linspace(mean-(3*std),mean+(3*std))
y=gaussian_curve(x,mean,std)
ax.plot(x,y,color='blue')
fcr2=mean-(std*1.2812)
ax.set_xlim([mean-(3*std),mean+(3*std)])
ax.fill_between(x,0,y,where=(x<=fcr2),hatch='///',color='blue',alpha=0.2)
ax.fill_between(x,0,y,where=(x<=especificacion),color='red',alpha=0.4)
valor_y=norm.pdf(especificacion,loc=mean,scale=std)
plt.annotate(f'fcr:{especificacion}',xy=(especificacion,valor_y),xytext=(especificacion,valor_y+0.02),
arrowprops=dict(facecolor='black'))
plt.annotate(f'fc10:{round(fcr2,2)}',xy=(round(fcr2,2),0),xytext=(round(fcr2,2),0.01),
arrowprops=dict(facecolor='black'))
1.我试着像这样在位置上添加小数:ax.fill_between(x,0,y,where=(x<=especificacion+0.3),color='red',alpha=0.4)
但它不工作
1.改变区域的绘制顺序,但它不会到达该位置。
1.在X轴上添加限制
1条答案
按热度按时间ar5n3qh51#
可以指定要使用
np.linspace
生成的点数。从the numpy documentationnum int,可选要生成的样本数。默认值为50。必须为非负数
通过增加要生成的样本数,每个点之间差距减小。你不能保证它是一个精确的匹配,但它会更接近你的目标值。在下面的示例中,我将
num
设置为200。或者,如果您需要与目标数字完全匹配,则可以向numpy数组添加一个虚拟变量,对其进行排序,然后绘制y值。