Как мне построить свою гистограмму для плотности, а не для подсчета?(Matplotlib) - PullRequest
0 голосов
/ 21 марта 2019

У меня есть фрейм данных под названием «train» со столбцом «string», столбцом «длина строки» и столбцом «rank», который имеет ранжирование в диапазоне от 0 до 4.

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

Единственный способ, которым я могу это сделать, - это создать отдельные наборы данных, например, со следующим типом кода:

S0 = train.loc[train['rank'] == 0]
S1 = train.loc[train['rank'] == 1]

Затем я создаю отдельные гистограммыдля каждого набора данных, используя:

plt.hist(train['string length'], bins = 100)
plt.show()

Этот код не отображает плотность, а вместо этого рассчитывает количество.Как я могу изменить свой код так, чтобы он отображал плотность?

Есть ли способ сделать это без необходимости создания отдельных наборов данных?Мне сказали, что мой метод «не пифонический»

1 Ответ

0 голосов
/ 21 марта 2019

Вы можете сделать что-то вроде:

df.loc[:, df.columns != 'string'].groupby('rank').hist(density=True, bins =10, figsize=(5,5))

По сути, он выбирает все столбцы, кроме string, группирует их по rank и составляет гистограмму всех их, следуя аргументам.

Аргумент плотности, установленный на density=True, рисует его нормализованным образом, как

Надеюсь, это помогло.

EDIT

Если есть еще переменные и вы хотите, чтобы гистограммы перекрывались, попробуйте:

df.groupby('rank')['string length'].hist(density=True, histtype='step', bins =10,figsize=(5,5))
...