Барплот не сгруппирован - PullRequest
1 голос
/ 15 января 2020

Я хочу создать барплот, в котором 'Age_round' сгруппированы вместе, а также в порядке возрастания. Прямо сейчас все столбцы разделены

import matplotlib.pyplot as plt
df.plot(kind='bar',x='Age_round',y='number of purchased hours(mins)')
plt.xlabel('Age_round')
plt.ylabel('number of purchased hours(mins)')
# plt.xticks(np.arange(start = 4, stop = 17, step = 1))
plt.title('Age Distribution Graph')
plt.grid()

Это мой кадр данных ниже

    Package Age_round   gender
1   7000    9.0 1
2   7000    10.0    0
3   5000    9.0 0
4   9000    10.0    1
5   3000    12.0    1
6   5000    9.0 1
7   9000    10.0    1
8   6000    16.0    1
9   6000    12.0    0
10  6000    7.0 1
11  12000   7.0 1
12  12000   15.0    1
13  6000    10.0    1

enter image description here

По сути, я бы хотел чтобы создать столбец, где ось X представляет собой Age_round, ось Y, показывающая частоту, и «Package» различаются столбцами разного цвета

Ответы [ 2 ]

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

Вот возможная реализация:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(columns=['Package', 'Age_round', 'gender'],
                  data=[[7000, 9.0, 1], [7000, 10.0, 0], [5000, 9.0, 0], [9000, 10.0, 1], [3000, 12.0, 1],
                        [5000, 9.0, 1], [9000, 10.0, 1], [6000, 16.0, 1], [6000, 12.0, 0], [6000, 7.0, 1],
                        [12000, 7.0, 1], [12000, 15.0, 1], [6000, 10.0, 1]])
df['Age_round'] = df['Age_round'].astype(int) # optionally round the numbers to integers

df.sort_values(['Age_round', 'Package']).plot(kind='bar', x='Age_round', y='Package', rot=0, color='deeppink')

plt.xlabel('Age (rounded)')
plt.ylabel('Number of purchased hours(mins)')
plt.title('Age Distribution Graph')
plt.grid(True, axis='y')
plt.show()

resulting plot

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

Я написал фрагмент кода, который выполняет эту работу, но не уверен, что это лучший способ:

создал новый файл PDF для чтения частотных данных для каждого возраста в сравнении с Package и присвоил значениям (age) как его индекс

values = df.Age_round.unique()
values.sort()

newdf = pd.DataFrame()  

for x in values : 
    freq_x = df[df['Age_round']==x]['Package'].value_counts()
    newdf = newdf.append(freq_x)

newdf.index = values
newdf.plot(kind='bar',stacked=True, figsize=(15,6))

enter image description here

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