#python #pandas #matplotlib #pie-chart
#python #pandas #matplotlib #круговая диаграмма
Вопрос:
У меня есть следующие данные:
ID Gender Country ...
1 Male UK
2 Female US
3 Male NZ
4 Female UK
...
Есть только 2 варианта для пола и 3 для страны. Я хотел бы создать отдельную круговую диаграмму как для «Пола», так и для «Страны», чтобы показать, сколько раз каждый параметр отображается в данных, но я совершенно не понимаю, как это сделать.
Данные хранятся в фрейме данных pandas.
Любая помощь очень ценится!
Комментарии:
1. В какой структуре данных находятся ваши данные?
2. Она хранится в фрейме данных pandas
Ответ №1:
Вот подход, использующий pandas:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
def label_function(val):
return f'{val / 100 * len(df):.0f}n{val:.0f}%'
N = 50
df = pd.DataFrame({'country': np.random.choice(['UK', 'US', 'NZ'], N),
'gender': np.random.choice(['Male', 'Female'], N)})
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(10, 5))
df.groupby('country').size().plot(kind='pie', autopct=label_function, textprops={'fontsize': 20},
colors=['tomato', 'gold', 'skyblue'], ax=ax1)
df.groupby('gender').size().plot(kind='pie', autopct=label_function, textprops={'fontsize': 20},
colors=['violet', 'lime'], ax=ax2)
ax1.set_ylabel('Per country', size=22)
ax2.set_ylabel('Per gender', size=22)plt.tight_layout()
plt.show()
PS: Чтобы просто показать процент, используйте autopct='%1.0f%%'
.
Комментарии:
1. Это большое спасибо! Можно ли в любом случае добавить метки данных на диаграмму, чтобы они также отображали количество / процент на диаграмме?
Ответ №2:
Я предполагаю, что вы начали с этого
import pandas as pd
from matplotlib.pyplot import pie, axis, show
df = pd.DataFrame([[1,'Male','UK'], [2, 'Female', 'NZ'], [3, 'Male', 'UK'], [4, 'Male', 'US']], columns=['ID', 'Gender', 'Country'])
График для пола
df.groupby('gender').size().plot(kind='pie', autopct='%.2f')
График для страны
df.groupby('country').size().plot(kind='pie', autopct='%.2f')
Ответ №3:
Хорошо, так как вы используете фрейм данных, подобный этому:
data = pd.DataFrame([[1,'Male','UK'], [2, 'Female', 'NZ'], [3, 'Male', 'UK'], [4, 'Male', 'US']], columns=['ID', 'Gender', 'Country'])
Вы действительно можете просто сделать:
data['Gender'].value_counts().plot(kind='pie')
Если вы хотите сделать это вручную:
people = len(data.Gender)
genders = len(set(data.Gender))
res = []
for gender in set(data.Gender):
res.append([gender, len(data[data['Gender']==gender]), len(data[data['Gender']==gender])/people])
а затем просто нарисуйте ее.
Комментарии:
1. Это большое спасибо! Можно ли в любом случае добавить метки данных на диаграмму, чтобы они также отображали количество / процент на диаграмме?