这不是直接回答你的问题。然而,我认为我应该指出,你的数据来自一个离散的随机变量(而不是一个连续的变量),因此,在一些情况下,用一系列线段表示它们可能有点误导。在cumulative distribution function中的表示可能是矫枉过正。我提供以下简化。
![enter image description here](https://i.stack.imgur.com/YH6jl.png)
的 'x' 表示截断。点表示闭合间隔的闭合端。
这是代码。我没想过用np.cumsum
!
import numpy as np
import pylab as pl
from matplotlib import collections as mc
p = [0.00909909009099,0.02299770023,0.578742125787,0.211278872113,0.00529947005299,0.031796820318,0.0530946905309,0.0876912308769]
cumSums = [0] + [sum(p[:i]) for i in range(1,len(p)+1)]
counts = [30,34,42,54,58,62,66,70,74,80]
lines =[[(counts[i],cumSums[i]),(counts[i+1],cumSums[i])] for i in range(-1+len(counts))]
lc = mc.LineCollection(lines, linewidths=2)
fig, ax = pl.subplots()
ax.add_collection(lc)
pl.plot([30, 80],[0, 1],'bx')
pl.plot(counts[1:-1], cumSums[1:], 'bo')
ax.autoscale()
ax.margins(0.1)
pl.show()
这更像是你似乎想要的情节。 (更正,我希望。)
![enter image description here](https://i.stack.imgur.com/P6ThZ.png)
对于其中的代码。
import numpy as np
import pylab as pl
from matplotlib import collections as mc
from sys import exit
p = [0.00909909009099,0.02299770023,0.578742125787,0.211278872113,0.00529947005299,0.031796820318,0.0530946905309,0.0876912308769]
cumSums = [sum(p[:i]) for i in range(1,len(p)+1)]
counts = [34,42,54,58,62,66,70,74]
lines = [[(counts[i],cumSums[i]),(counts[i+1],cumSums[i+1])] for i in range(-1+len(p))]
lc = mc.LineCollection(lines, linewidths=2)
fig, ax = pl.subplots()
ax.add_collection(lc)
ax.autoscale()
ax.margins(0.1)
pl.show()
我试图澄清我的答案的第一部分。 –