Pyplot中的累积频率直方图不绘制零值数据的完整图

时间:2016-06-26 05:31:01

标签: python matplotlib graph

我编写了一个脚本,用于分析数据,为每个数据生成一个值(介于0和2之间),根据算法删除一些数据,然后重复分析和生成值。在每个删除数据的步骤中,它生成数据日志的累积频率直方图,以帮助可视化生成值的某些范围内的峰值,y轴从0到1(表示0%到100%)和x轴从0到2(可能值的范围),因此线图中的陡峭斜率表示在陡峭斜率发生的特定域上的大量值,如此frequency histogram example。 (注意直方图中的峰值与累积图中的斜率相关)

我遇到的问题是,当我生成图表时,仅为其值生成零的数据的累积频率直方图应该是y=1顶部的直线,表示100%的对于该特定情节,数字的值为零,但我在y=1处得到一条仅从x=0x=0.5的线,如graph所示。我需要该行一直在y=1,从x=0x=2

以下是生成图表的代码:

# Calculate histogram and bins
hist_, bins_ = np.histogram(e.real, bins = 500, normed=0)
cuml = np.cumsum(hist_)
# Plot and normalize data range by dividing values
plt.plot(bins_[:-1], np.divide(cuml,float(max(cuml))) , label=str(rem_) + ' removed', marker = markr.next(), markevery = 9)
# Limit axis ranges to possible values
plt.xlim(0, 2)
plt.ylim(0, 1)

e.real是一个包含生成值的列表对象,这里是在绘制上面链接的图形时记录的值:

200 removed
[ 2.  0.  2.  0.  2.  0.  2.  0.  2.  0.  2.  0.  2.  0.  2.  0.  2.  0.
  2.  0.  2.  0.  2.  0.  2.  0.  2.  0.  2.  0.  2.  0.  2.  0.  2.  0.
  2.  0.  2.  0.  2.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.]
300 removed
[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
382 removed
[ 0.]

正如您在记录值中看到的那样,在 200已移除时,图表显示大约80%的数字的值为零(由从y=0.9开始的x=0之间的行,其余的值为2(由y=0.9处的y=1x=2的情节表示。在 300已移除 382已移除的图中,日志显示100%的值为零,并且图表应确认从y=1开始的x=0上的一行,而不是显示仅转到x=0.5的短行。

(注意: 300删除 382删除具有相同的图形并重叠形成短线;重叠是正确的行为)

关于如何修复我的线长的任何想法?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

尝试使用np.histogram中的范围选项

hist_, bins_ = np.histogram(e.real, bins = 500, range = (0, 2), normed=0)