<p>使用直方图确实是不必要的繁重和不精确(binning使数据变得模糊):您可以对所有x值进行排序:每个值的索引是较小的值的数目。这个更短更简单的解决方案如下:</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
# Some fake data:
data = np.random.randn(1000)
sorted_data = np.sort(data) # Or data.sort(), if data can be modified
# Cumulative counts:
plt.step(sorted_data, np.arange(sorted_data.size)) # From 0 to the number of data points-1
plt.step(sorted_data[::-1], np.arange(sorted_data.size)) # From the number of data points-1 to 0
plt.show()
</code></pre>
<p>此外,更合适的绘图样式实际上是<code>plt.step()</code>,而不是<code>plt.plot()</code>,因为数据位于离散位置。</p>
<p>结果是:</p>
<p><img src="https://i.stack.imgur.com/RTlT1.png" alt="enter image description here"/></p>
<p>您可以看到,它比EnricoGiampieri的答案的输出更粗糙,但这是真正的直方图(而不是它的近似、模糊版本)。</p>
<p><strong>PS</strong>:正如SebastianRaschka所指出的,理想情况下,最后一点应该显示总计数(而不是总计数-1)。这可以通过以下方式实现:</p>
<pre><code>plt.step(np.concatenate([sorted_data, sorted_data[[-1]]]),
np.arange(sorted_data.size+1))
plt.step(np.concatenate([sorted_data[::-1], sorted_data[[0]]]),
np.arange(sorted_data.size+1))
</code></pre>
<p>在<code>data</code>中有太多的点,如果不缩放,效果是不可见的,但是当数据只包含几个点时,总计数的最后一个点确实很重要。</p>