Python: постройте гистограмму с учетом подсчетов (frequncies) и бункеров

Чтобы проиллюстрировать мою проблему, я привел пример:

Во-первых, у меня есть два массива «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() 

Этот код дает мне гистограмму с двумя «кривыми». Теперь я хочу вычесть одну «кривую» из другой, и я имею в виду, что я делаю это для каждого бункера отдельно:

 n3 = n2-n1 

Мне не нужны отрицательные подсчеты так:

 for i in range(0,len(n2)): if n3[i]<0: n3[i]=0 else: continue 

Новая кривая гистограммы должна быть построена в том же диапазоне, что и предыдущие, и должна иметь такое же количество бункеров. Таким образом, у меня есть количество ящиков и их позиция (которые будут такими же, как и для других кривых, см. Блок выше) и частоты или отсчетов (n3), которые должны иметь каждая ячейка. Есть ли у вас идеи о том, как я могу это сделать с данными, которые у меня есть?

    Вы можете использовать функцию шага для построения 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() 

    введите описание изображения здесь