【问题标题】:Symmetrize a histogram plot or array?对称直方图或数组?
【发布时间】:2017-12-02 06:09:55
【问题描述】:

我有一个从 -5 到 5 的直方图,我可以随意操作和绘制它,并且我使用以下 PDF 对其进行单样本 KS 测试:norm、cauchy、students t、laplace。

但是,我必须对数据进行对称化(使其仅从 0 变为 5)并对其进行 KS 测试。这对 norm 和 cauchy 来说都很好.. 但我在 scipy.stats 中找不到“半学生 t”PDF

所以我也非常感谢您的帮助:

1) 在如何绘制从 5、4、3、2、1、0、1、2、... 向上返回的直方图,其中没有负数,不只显示 0 到5 我可以像往常一样为我的 KS 测试设置 loc=0 。 (我希望我可以做一个 plt.MirroredAboutX() 什么的?)或者,

2) 有人知道 PDF 中是否有一半学生隐藏在我掩饰的地方吗?

谢谢!

编辑:使用此列表对上述 #1 进行澄清

l = [-1.93067027 -1.00267766 -0.6349767  -0.82698775 -0.59277326 -0.67801007 -0.60888202 -0.27387228 -0.03645225 -0.02120668  0.02004329  0.40640109 0.661673 0.77414735  0.86466529  0.53162743  0.64943555  0.7827397 1.8450599   1.44000795]

plt.hist(l) 显示了从 -2 到 2 的直方图,

plt.hist(np.abs(l)) 向我展示了一个从 0 到 2 的直方图。

我希望从 0 到 2 的直方图现在在 y 轴上进行镜像/翻转,以便 x 轴的范围是从 2 到 2(因为它以 0 为中心),就是这样漂亮的对称直方图。

【问题讨论】:

  • 我想知道这是否与为绝对值做直方图相同。直方图(abs(x))。此外,提供您想要实现的目标的示例代码真的很有意义。
  • 感谢您的推荐,我已经更新了我的问题。
  • 这样更好。但是如果你翻转直方图,你不会得到错误的值吗? y 轴上的值实际上不再对应任何合理的数字,对吧?
  • 它们会并且只是镜像值,我只需要翻转它,这样我就可以将 KS 测试用于高斯或柯西测试。你知道怎么做吗?

标签: python-2.7 matplotlib plot scipy histogram


【解决方案1】:

您可以绘制一个 numpy 直方图结果的条形图。然后,您可以反转数组以绘制它们的镜像版本。

import matplotlib.pyplot as plt
import numpy as np

l = "-1.93067027 -1.00267766 -0.6349767 -0.82698775 -0.59277326 -0.67801007 -0.60888202 -0.27387228 -0.03645225 -0.02120668  0.02004329  0.40640109 0.661673 0.77414735  0.86466529  0.53162743  0.64943555  0.7827397 1.8450599   1.44000795"
l = np.array(list(map(lambda x: float(x),l.split() )))

step = 0.25
bins = np.arange(0,2.01, step)
hist, edges = np.histogram(np.abs(l),bins=bins)

plt.bar(bins[:-1], hist, width=step, align="edge", ec="k")

plt.bar(-bins[::-1][:-1], hist[::-1], width=step, align="edge", ec="k")

plt.show()

请注意,这样做,y 轴失去了它的定量意义,因为每个值在镜像图中都占了两次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2014-02-03
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2021-09-21
    • 2018-10-03
    相关资源
    最近更新 更多