【问题标题】:Python: Plot a histogram given the counts (frequencies) and the binsPython:在给定计数(频率)和 bin 的情况下绘制直方图
【发布时间】:2017-06-27 17:48:08
【问题描述】:

为了说明我的问题,我准备了一个例子:

首先,我有两个数组“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    

新的直方图曲线应绘制在与先前曲线相同的范围内,并且应具有相同数量的 bin。所以我有 bin 的数量及其位置(与其他曲线的位置相同,请参阅上面的块)以及每个 bin 应具有的频率或计数 (n3)。您对我如何使用我拥有的数据执行此操作有任何想法吗?

【问题讨论】:

    标签: python matplotlib plot subtraction curves


    【解决方案1】:

    您可以使用阶梯函数绘制n3 = n2 - n1。唯一的问题是您需要再提供一个值,否则最后一个值无法很好地显示。您还需要使用step 函数的where="post" 选项。

    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()
    

    【讨论】:

    • 非常感谢您的回答,这解决了我的问题:)
    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2017-12-23
    • 2013-10-02
    • 2020-03-28
    • 2013-03-21
    • 2015-11-11
    • 2015-10-22
    相关资源
    最近更新 更多