当前位置: 首页 > 面试题库 >

如何在Python的matplotlib中绘制经验CDF?

龚奕
2023-03-14
问题内容

如何在Python的matplotlib中绘制数字数组的经验CDF?我正在寻找pylab的“ hist”函数的cdf模拟。

我能想到的一件事是:

from scipy.stats import cumfreq
a = array([...]) # my array of numbers
num_bins =  20
b = cumfreq(a, num_bins)
plt.plot(b)

那是正确的吗?有没有更简单/更好的方法?

谢谢。


问题答案:

看起来(几乎)完全是您想要的。两件事情:

首先,结果是四个项目的元组。第三个是垃圾箱的大小。第二个是最小垃圾箱的起点。第一个是每个垃圾箱中或下方的点数。(最后是超出限制的点数,但是由于您未设置任何点数,因此将对所有点进行分箱。)

其次,您需要调整结果的比例,使最终值为1,以遵循CDF的常规约定,但否则是正确的。

这是它的内幕:

def cumfreq(a, numbins=10, defaultreallimits=None):
    # docstring omitted
    h,l,b,e = histogram(a,numbins,defaultreallimits)
    cumhist = np.cumsum(h*1, axis=0)
    return cumhist,l,b,e

它进行直方图处理,然后在每个仓中生成计数的累积和。因此,结果的第i个值是小于或等于第i个bin的最大值的数组值的数量。因此,最终值只是初始数组的大小。

最后,要进行绘制,您需要使用bin的初始值和bin大小来确定所需的x轴值。

另一个选择是使用numpy.histogram它可以进行归一化并返回仓边。您需要自己对结果计数进行累加。

a = array([...]) # your array of numbers
num_bins = 20
counts, bin_edges = numpy.histogram(a, bins=num_bins, normed=True)
cdf = numpy.cumsum(counts)
pylab.plot(bin_edges[1:], cdf)

bin_edges[1:]是每个垃圾箱的上边缘。)



 类似资料:
  • 问题内容: 我正在学习线性代数课程,我想可视化正在使用的向量,例如向量加法,法向向量等。 例如: 在这种情况下,我想绘制3个向量。 然后,我应该能够添加V1,V2来绘制一个新的向量V12(全部合并在一个图中)。 当我使用以下代码时,情节与预期不符 问题答案: 多亏了每个人,您的每个帖子对我都有很大帮助。 对于我的问题,rbierman代码非常简单,我做了一些修改,并创建了一个函数来绘制给定数组中的

  • 问题内容: 我有一个格式为(HH:MM:SS.mmmmmm)的时间戳数组和另一个浮点数数组,每个浮点数对应于timestamp数组中的一个值。 我可以使用Matplotlib在x轴上绘制时间,在y轴上绘制数字吗? 我试图这样做,但是不知何故它只接受浮点数数组。如何获得时间图?我必须以任何方式修改格式吗? 问题答案: 你必须首先将时间戳转换为对象(使用)。然后使用将日期转换为格式。 使用以下方式绘制

  • 问题内容: 我正在尝试使用OpenCV从摄像机实时绘制一些数据。但是,实时绘图(使用matplotlib)似乎不起作用。 我将问题隔离到以下简单示例中: 我希望该示例可以单独绘制1000点。实际发生的情况是,窗口弹出并显示第一个点(表示正确),然后等待循环结束,然后填充图的其余部分。 有什么想法为什么我一次看不到点呢? 问题答案: 这是有问题的代码的工作版本(至少需要从2011-11-14起版本)

  • 给定一个信号的时间表示图,如何画出相应的时间指标线? 具体来说,给定一个时间索引范围为0到2.6(s)的信号图,我想画垂直红线,指示列表的相应时间索引,我该怎么做?

  • 我有以下图表,由几行组成: 现在,我想标记绘图中的所有线条。但是,使用将所有标签塞入一个框中,这使得绘图有点难以解释。我想改为使用内联标签。我的理想输出将使用类似以下matplotlib等高线图的标签,但文字标签用于线而不是数字: 在matplotlib文档中,我还没有找到如何做到这一点。有没有办法做到这一点?如果没有,我可以使用什么其他软件生成这种类型的绘图?

  • 问题内容: 如何更改用matplotlib绘制的图形的大小? 问题答案: 如果你已经创建了图形,则可以快速执行以下操作: 要将大小更改传播到现有的窗口,请添加