Как мне построить три гистограммы на одном рисунке, где каждая из них должна представлять диапазон значений? - PullRequest
0 голосов
/ 01 декабря 2018

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

Несколько гистограмм, каждая для метки оси X, на одном графике matplotlib

Построить две гистограммыодновременно с matplotlib

и многими другими, но ничего.

Итак, я решил задать вам свой вопрос.У меня есть два массива таких вероятностей (для простоты я привожу два небольших списка): a = [0,1, 0,2, 0,4, 0,56, 0,67, 0,70, 0,89, 0,90] b = [0,15, 0,22, 0,41, 0,47, 0,45,0,59, 0,66, 0,75, 0,83, 0,99]

Я должен создать гистограммы, которые представляют три группы баров, образованных 2 барами (один для массива a и другой для массива b).

Первая группа столбцов должна представлять значения массивов, которые находятся между 0,0 (включены) и 0,4 (исключены), вторая группа должна представлять значения массивов, которые находятся между 0,4 (включены) и 0,65 (исключено)), а последняя группа должна представлять оставшиеся значения.На оси Y я предпочел бы иметь относительную частоту (вместо абсолютной частоты).
Я должен получить что-то вроде этого https://ibb.co/41BdCCP (что я нашел в https://plot.ly/python/bar-charts/),, но, очевидно, на хПо оси я бы указывал диапазон значений (вместо имени животного), а по оси Y я бы относительную частоту (как я писал ранее).

Большое спасибо, я надеюсь, что кто-то сможет решить мою проблему.

1 Ответ

0 голосов
/ 01 декабря 2018

Я не знаю, чего именно вы хотите: гистограмму или гистограмму.Но вот гистограмма, основанная на вашем вопросе:

Здесь я использую маску для определения групп, которые вы хотите построить.Вы можете адаптировать решение к вашей проблеме.Я создал несколько тестовых массивов, например, цель

a = np.array([0.04, 0.09,0.1, 0.12, 0.2, 0.4, 0.42, 0.44, 0.47, 0.5, 0.53,0.56, 0.67, 0.70, 0.75, 0.76, 0.78, 0.79, 0.89, 0.90] )
b = np.array([0.05, 0.08, 0.15,0.12, 0.22, 0.41, 0.43, 0.44, 0.46, 0.47, 0.45, 0.51, 0.54,0.59, 0.66, 0.75, 0.75, 0.76, 0.77, 0.8, 0.83, 0.99])

lim = [0, 0.4, 0.65, 1]
for i in range(len(lim)-1):
    plt.hist(a[(a>=lim[i]) & (a<lim[i+1])], color='r')
    plt.hist(b[(b>=lim[i]) & (b<lim[i+1])], color='b')

enter image description here

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