为了说明我的问题,我准备了一个例子:
首先,我有两个数组'a'和'b',我对它们的发行感兴趣:
import numpy as np
import matplotlib.pyplot as plt
a = np.array([1,2,2,2,2,4,8,1,9,5,3,1,2,9])
b = np.array([5,9,9,2,3,9,3,6,8,4,2,7,8,8])
n1,bin1,pat1 = plt.hist(a,np.arange(1,10,2),histtype='step')
n2,bin2,pat2 = plt.hist(b,np.arange(1,10,2), histtype='step')
plt.show()
这段代码给了我一个带有两条“曲线”的直方图。现在我想从另一个中减去一个'曲线',我的意思是我分别为每个bin做这个:
n3 = n2-n1
我不需要负数,所以:
for i in range(0,len(n2)):
if n3[i]<0:
n3[i]=0
else:
continue
新的直方图曲线应绘制在与前一个相同的范围内,并且它应具有相同的二进制数。所以我有一些箱子的数量和它们的位置(与其他曲线的位置相同,请参考上面的方块)以及每个箱子应该具有的频率或数量(n3)。您对我如何使用我拥有的数据有任何想法吗?
答案 0 :(得分:1)
您可以使用步进功能绘制n3 = n2 - n1
。唯一的问题是您需要再提供一个值,否则最后一个值不能很好地显示。您还需要使用where="post"
函数的step
选项。
import numpy as np
import matplotlib.pyplot as plt
a = np.array([1,2,2,2,2,4,8,1,9,5,3,1,2,9])
b = np.array([5,9,9,2,3,9,3,6,8,4,2,7,8,8])
n1,bin1,pat1 = plt.hist(a,np.arange(1,10,2),histtype='step')
n2,bin2,pat2 = plt.hist(b,np.arange(1,10,2), histtype='step')
n3=n2-n1
n3[n3<0] = 0
plt.step(np.arange(1,10,2),np.append(n3,[n3[-1]]), where='post', lw=3 )
plt.show()