python - 在 matplotlib 中绘制概率分布的积分

标签 python numpy matplotlib

我正在尝试绘制概率分布的积分,类似于此图像:prob

请注意 Y 轴如何开始向顶部变得更加细化。

我已经有了想要绘制的精确百分位数,以及 x 轴的相应值。

到目前为止我的代码是:

import matplotlib.pylab as plt
import numpy as np
import scipy as sp
from scipy import stats

x = np.array([0.0000025,0.000005,0.00001,0.00002,0.00003,0.00004,0.00005,0.00006,0.00007,0.00008,0.00009,0.0001,0.0002,0.00025,0.00035,0.0005,0.001,0.002,0.005,0.01,1])
y = np.array([0,0,0,0,0,0,0,0,46.29821447,49.49781571,49.83072758,50.89081787,98.49113721,98.5522082,99.29547499,99.91765345,99.93779431,99.95351796,99.98066963,99.99294867,100])
my_xticks = ['<2.5 uS', '<5 uS', '<10 uS', '<20 uS', '<30 uS', '<40 uS', '<50 uS', '<60 uS', '<70 uS', '<80 uS', '<90 uS', '<100 uS', '<200 uS', '<250 uS', '<350 uS', '<500 uS', '<1 mS', '<2 uS', '<5 mS', '<10 mS', '<1 S']
plt.xticks(x, my_xticks)
plt.yticks(np.arange(y.min() - 20, y.max() + 1, 10))
plt.xticks(np.arange(x.min() + 0.035, x.max(), 0.08))
plt.plot(x, y)
plt.grid(axis='y')
plt.show()

输出如下:

output

更新

因此,我设法准确地分割多个图 10,同时为每个图分配不同的 y 轴限制,以便将数据点分开以提高可读性。这都是硬编码的,这提出了自己的挑战,因为我将使用值非常接近的不同向量提供动态数据。我可以设计函数来分析值彼此的接近度,基于此绘制 x 数量的图并分配限制,但这对于必须绘制多个图的工作和资源来说是过多的。这是我到目前为止所拥有的,

x = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])
y = np.array([0,0,0,0,0,0,0,0,46.29821447,49.49781571,49.83072758,50.89081787,98.49113721,98.5522082,99.29547499,99.91765345,99.93779431,99.95351796,99.98066963,99.99294867,100])
my_xticks = ['<2.5 uS', '<5 uS', '<10 uS', '<20 uS', '<30 uS', '<40 uS', '<50 uS', '<60 uS', '<70 uS', '<80 uS', '<90 uS', '<100 uS', '<200 uS', '<250 uS', '<350 uS', '<500 uS', '<1 mS', '<2 uS', '<5 mS', '<10 mS', '<1 S']
f,(ax,ax2,ax3,ax4,ax5,ax6,ax7,ax8,ax9,ax10) = plt.subplots(10,1,sharex=True)

majorFormatter = FormatStrFormatter('%.7f')
plt.subplots_adjust(hspace=0)
plt.xticks(x, my_xticks)
ax.grid(axis='y')
ax2.grid(axis='y')
ax3.grid(axis='y')
ax4.grid(axis='y')
ax5.grid(axis='y')
ax6.grid(axis='y')
ax7.grid(axis='y')
ax8.grid(axis='y')
ax9.grid(axis='y')
ax10.grid(axis='y')

ax.plot(x,y, '-r')
ax.plot(x,y, '.')
ax2.plot(x,y, '.')
ax2.plot(x,y, '-r')
ax3.plot(x,y, '.')
ax3.plot(x,y, '-r')
ax4.plot(x,y, '.')
ax4.plot(x,y, '-r')
ax5.plot(x,y, '.')
ax5.plot(x,y, '-r')
ax6.plot(x,y, '.')
ax6.plot(x,y, '-r')
ax7.plot(x,y, '.')
ax7.plot(x,y, '-r')
ax8.plot(x,y, '.')
ax8.plot(x,y, '-r')
ax9.plot(x,y, '.')
ax9.plot(x,y, '-r')
ax10.plot(x,y, '.')
ax10.plot(x,y, '-r')

ax.set_yticks(y)
ax2.set_yticks(y)
ax3.set_yticks(y)
ax4.set_yticks(y)
ax5.set_yticks(y)
ax6.set_yticks(y)
ax7.set_yticks(y)
ax8.set_yticks(y)
ax9.set_yticks(y)
ax10.set_yticks(y)

ax.set_ylim(99.95,100)
ax2.set_ylim(99.8,99.95)
ax3.set_ylim(99.5,99.8)
ax4.set_ylim(99,99.5)
ax5.set_ylim(98.5,99)
ax6.set_ylim(93,98.5)
ax7.set_ylim(90,93)
ax8.set_ylim(86,90)
ax9.set_ylim(70,86)
ax10.set_ylim(0,70)

ax.spines['bottom'].set_visible(False)
ax2.spines['top'].set_visible(False)
ax2.spines['bottom'].set_visible(False)
ax3.spines['top'].set_visible(False)
ax3.spines['bottom'].set_visible(False)
ax4.spines['top'].set_visible(False)
ax4.spines['bottom'].set_visible(False)
ax5.spines['top'].set_visible(False)
ax5.spines['bottom'].set_visible(False)
ax6.spines['top'].set_visible(False)
ax6.spines['bottom'].set_visible(False)
ax7.spines['top'].set_visible(False)
ax7.spines['bottom'].set_visible(False)
ax8.spines['top'].set_visible(False)
ax8.spines['bottom'].set_visible(False)
ax9.spines['top'].set_visible(False)
ax9.spines['bottom'].set_visible(False)
ax10.spines['top'].set_visible(False)

ax.yaxis.set_major_formatter(majorFormatter)
ax2.yaxis.set_major_formatter(majorFormatter)
ax3.yaxis.set_major_formatter(majorFormatter)
ax4.yaxis.set_major_formatter(majorFormatter)
ax5.yaxis.set_major_formatter(majorFormatter)
ax6.yaxis.set_major_formatter(majorFormatter)
ax7.yaxis.set_major_formatter(majorFormatter)
ax8.yaxis.set_major_formatter(majorFormatter)
ax9.yaxis.set_major_formatter(majorFormatter)
ax10.yaxis.set_major_formatter(majorFormatter)

plt.show()

graph

最佳答案

yx = 0.00006 处的 0 增加到 x = 0.01 处的 99.99,然后仅在 < em>x = 0.01 且 x = 1。该线基本上呈 L 形笔直向上,非常靠近绘图的左侧和上边界,因此被轴遮挡。

如果您将轴限制设置得稍微宽一点:

plt.xlim(-0.1, 1.1)
plt.ylim(-10, 110)

然后你就可以轻松地看到发生了什么:

enter image description here

正如 @snorthway 评论的那样,在对数刻度上绘制这些数据可能更明智(如您显示的示例图像所示):

plt.loglog(x, y)

enter image description here

但是,您将遇到 y 值包含 0 的问题。由于 log(0) = -无穷大,对于 x < 0.00007,该线变为垂直。

关于python - 在 matplotlib 中绘制概率分布的积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29662432/

相关文章:

python - 导入librosa给 “no module named numba.decorators”,如何解决?

python - 在 MAC 上安装 Django 错误消息 "Command "python setup.py egg_info"failed with error code 1 in/private/tmp/pip-build-2yOWor/django/"

Python:处理大量数据。 Scipy 还是 Rpy?如何?

python - 如何从 matplotlib 图形中获取方位角和仰角

python - 运行示例时出错

python - 基于第三列中的值的颜色散点图点?

python - 如何在 Python matplotlib 中的曲线下填充彩虹色

python - 如何在现有绘图中添加更多数据?

python - 使用otsu二值化时如何使用OpenCV python分割图像

python - Jupyter notebook 无法从 nb_conda_kernels 找到适用于 conda 环境的内核