Python Matplotlib 直方图 bin 移位

Python Matplotlib histogram bin shift

我已经根据我想要的列表创建了一个累积 (CDF) 直方图。然后,我从列表中的每个元素中减去一个固定值(通过使用 x = [ fixed_value - i for i in myArray]),本质上只是将 bin 移动固定数量。然而,这使我的 CDF 直方图在 y 轴上反转。我认为它看起来应该与原始版本相同,只是 x 轴(bins)移动了一个固定的量。

所以有人可以解释我做错了什么,或者给出一个解决方案,只是将 bin 移过来,而不是用新数组重新创建另一个直方图吗?

编辑:

有时我会看到这个错误:

>>> plt.hist(l,bins, normed = 1, cumulative = True)
C:\Python27\lib\site-packages\matplotlib\axes.py:8332: RuntimeWarning: invalid value encountered in true_divide
  m = (m.astype(float) / db) / m.sum()

但不限于第二种减法情况。 plt.hist returns 一个 NaN 数组。不确定这是否有帮助,但我认为我越来越接近弄清楚了。

编辑: 这是我的两张图。第一个是 "good" 一个。第二个是移位的 "bad" 一个:

我想做的就是将第一个垃圾箱移动固定数量。但是,当我从直方图中的每个列表中减去相同的值时,它似乎改变了 y 方向和 x 方向的直方图。另外,请注意第一个直方图都是负值,而第二个是正值。我似乎通过保持负值来修复它(我使用 original_array[i] - fixed_value <0,而不是 fixed_value - original_array[i] > 0

我认为问题可能在于您如何计算偏移值。这个例子对我来说很好用:

import numpy as np
import matplotlib.pylab as pl

original_array = np.random.normal(size=100)
bins = np.linspace(-5,5,11)

pl.figure()
pl.subplot(121)
pl.hist(original_array, bins, normed=1, cumulative=True, histtype='step')

offset = -2
modified_array = [original_value + offset for original_value in original_array]

pl.subplot(122)
pl.hist(modified_array, bins, normed=1, cumulative=True, histtype='step')

请注意,numpy 可能会让您的生活更轻松(对于大尺寸 original_array 很多 更快);比如你的数据是numpy.array,你也可以写成:

modified_array = original_array + offset

您的问题与直方图无关,而纯粹是因为您写的是 x = [ fixed_value - i for i in myArray],而不是 x = [i - fixed_value for i in myArray]。检查以下示例:

import numpy as np
import pylab as pl

x = np.linspace(0, 10., 1000)
y = np.exp(x)

x2 = [ 5. - i  for i in x]
x3 = [ i  - 5. for i in x]

pl.plot(x , y)
pl.plot(x2, y)
pl.plot(x3, y)

如果绘制这些图,您会看到第二个图是第一个图的镜像移位版本,而第三个图具有您正在寻找的移位。