【问题标题】:Cumulative frequency histogram in Pyplot doesn't plot full graph for zero-valued dataPyplot中的累积频率直方图不会为零值数据绘制完整图
【发布时间】:2016-06-26 05:31:01
【问题描述】:

我编写了一个脚本,用于分析数据,为每条数据生成一个值(介于 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.9y=1x=2 的图表示)。在 300 removed 382 removed 的图中,日志显示 100% 的值为零,并且该图应确认与横跨y=1 的线从x=0 开始,而不是显示只到x=0.5 的短线。

(注意:300去除382去除图相同,重叠形成短线;重叠是正确行为)

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

【问题讨论】:

  • 对于 300 removed 数据集,指定 bin 边的序列而不是 bin 的数量可以使图形看起来像您希望的那样。我没有在其他数据集上尝试过。似乎您希望所有数据集都具有相同的 bin 边缘。 bins = np.linspace(0,2, 500) 然后h, b = np.histogram(data, bins = bins, normed=0)

标签: python matplotlib graph


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2020-03-28
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多