对直方图或数组进行对称化?

时间:2017-06-28 18:21:53

标签: python-2.7 matplotlib plot scipy histogram

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

但是,我必须对数据进行对称化(使其从0到5)并对其进行KS测试。这对于常态和柯西来说很好..但是我找不到scipy.stats中的“半学生”PDF

所以我非常感谢你的帮助:

1)如何绘制直方图从5,4,3,2,1,0,1,2 ......重新开始,没有负数,不仅仅显示0到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的直方图, enter image description here

plt.hist(np.abs(l))向我显示0到2的直方图。 enter image description here

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

1 个答案:

答案 0 :(得分:0)

您可以绘制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()

enter image description here

请注意,执行此操作时,y轴已失去其定量含义,因为每个值在镜像图中都会占两倍。