Рассчитать процент для каждого бина в гистограмме - PullRequest
1 голос
/ 31 января 2020

У меня есть график, который я сделал, который выглядит следующим образом

enter image description here

Я хочу найти процент активных против неактивных для каждой корзины. Я хочу, чтобы ось Y была на 100%, и для каждого бина, какой процент пациентов является активным по сравнению с неактивным для этого бина.

Вот код, который я использовал для получения этого графика:

sns.distplot(inactive['inactivity_percentage'], kde = False, label="inactive")
plt.legend(labels=['active','inactive'])
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.show()

Я пытался вычислить процент в самих данных, но, поскольку это непрерывная переменная, я не могу заставить график выглядеть правильно. В пределах существующего графика я могу получить проценты для каждого бина?

1 Ответ

1 голос
/ 31 января 2020

Используйте numpy.histogram для расчета количества активных и неактивных с одинаковым шагом сетки . Затем рассчитайте крысу ios в каждой ячейке и построите график с использованием баров

np.random.seed(0)
data1 = np.random.normal(loc=0.5, scale=0.25, size=(2000,))
data2 = np.random.normal(loc=0.75, scale=0.1, size=(500,))

bins,step = np.linspace(0,1,11, retstep=True)
hist1,_ = np.histogram(data1, bins=bins)
hist2,_ = np.histogram(data2, bins=bins)
prop1 = 100*hist1/(hist1+hist2)
prop2 = 100*hist2/(hist1+hist2)

fig, ax = plt.subplots()
ax.bar(x=bins[:-1], height=prop1, bottom=0, align='edge', width=step)
ax.bar(x=bins[:-1], height=prop2, bottom=prop1, align='edge', width=step)
ax.yaxis.set_major_formatter(matplotlib.ticker.PercentFormatter())

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...