<p>好吧,这不是最干净的代码,但我看不出有什么办法可以绕过它。也许我真正想要的不是对数CDF,但我会等统计学家告诉我的。总之,我想到的是:</p>
<pre><code># retrieve event times and latencies from the file
times, latencies = read_in_data_from_file('myfile.csv')
cdfx = numpy.sort(latencies)
cdfy = numpy.linspace(1 / len(latencies), 1.0, len(latencies))
# find the logarithmic CDF and ylabels
logcdfy = [-math.log10(1.0 - (float(idx) / len(latencies)))
for idx in range(len(latencies))]
labels = ['', '90', '99', '99.9', '99.99', '99.999', '99.9999', '99.99999']
labels = labels[0:math.ceil(max(logcdfy))+1]
# plot the logarithmic CDF
fig = plt.figure()
axes = fig.add_subplot(1, 1, 1)
axes.scatter(cdfx, logcdfy, s=4, linewidths=0)
axes.set_xlim(min(latencies), max(latencies) * 1.01)
axes.set_ylim(0, math.ceil(max(logcdfy)))
axes.set_yticklabels(labels)
plt.show()
</code></pre>
<p>最麻烦的是我要更换ytick标签。<code>logcdfy</code>变量将保存0到10之间的值,在我的示例中它是在0和6之间。在这段代码中,我用百分数交换标签。也可以使用<code>plot</code>函数,但我喜欢<code>scatter</code>函数在尾部显示异常值的方式。另外,我选择不把x轴放在对数刻度上,因为我的特定数据没有它就有一条很好的线性线。在</p>
<p><img src="https://i.stack.imgur.com/F67Mi.png" alt="enter image description here"/></p>