我使用matplotlib绘制概率分布,看起来像是Pareto分布和具有正均值的高斯的总和。换句话说,它具有接近0的非常大的值,x = a处的小局部最小值,x = b处的局部最大值。 a,一个长的右尾衰减到0。 我希望仅基于局部最小值右侧的那些值来设置y限制,即,切掉最左边的值以便关注局部最大值。我知道我可以这样做:
plt.plot(pdf)
plt.ylim((0, local_maximum))
但是,这会将ymax设置为局部最大值的值,这使得绘图看起来很难看,原因有二:
用于选择默认轴的Matplotlib算法相当不错,所以我目前的黑客是绘制两次:第一次我只绘制高于局部最小值的数据,以便选择一个好的ylim,并且第二次我绘制所有数据,如下:
fig, ax = plt.subplots()
# first plot the data above the local minimum x=a, just to get a good ymax
plt.plot(pdf[a:])
ymin, ymax = plt.ylim()
# now plot all the data using the nice ymax
fig.clear()
plt.ylim((0, ymax))
plt.plot(pdf)
这给了我一个很好的ymax,它是ytics的圆整倍数,适合数据到本地最大值,有一些空白。
有没有更好的方法,不需要两次绘图?