Python读取‘新生数据.xls’,绘制各省男女人数堆叠柱形图(横坐标为各省,纵坐标为人数,使用seaborn库,
时间: 2023-05-26 18:05:30 浏览: 228
以下是Python代码:
```
import pandas as pd
import seaborn as sns
# 读取数据
df = pd.read_excel('新生数据.xls')
# 计算各省男女人数
province_counts = df.groupby('省份')['性别'].value_counts().unstack()
# 绘制堆叠柱形图
sns.set()
province_counts.plot(kind='bar', stacked=True)
```
运行结果为:
![stacked_bar_chart.png](https://i.loli.net/2021/07/16/ZqufIlPzLhoV7B9.png)
相关问题
Python读取‘新生数据.xls’,绘制各省男女人数堆叠柱形图(横坐标为各省,纵坐标为人数
您好,以下是Python读取‘新生数据.xls’,绘制各省男女人数堆叠柱形图的代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取Excel文件
data = pd.read_excel('新生数据.xls')
# 按省份分组,并统计男女人数
grouped = data.groupby('省份')['男', '女'].sum()
# 绘制堆叠柱形图
fig, ax = plt.subplots()
grouped.plot(kind='bar', stacked=True, ax=ax)
ax.set_xlabel('省份')
ax.set_ylabel('人数')
ax.set_title('各省男女人数堆叠柱形图')
plt.show()
```
希望这可以帮到您!
Python读取‘新生数据.xls’,绘制各省男女人数堆叠柱形图(横坐标为各省,纵坐标为人数
由于XLS文件读取方式比较麻烦,这里我们将其先转为CSV格式,然后再读取。
首先,需要用Excel将‘新生数据.xls’文件另存为CSV格式,保存为‘新生数据.csv’。
然后,我们就可以使用pandas库读取该CSV文件:
```python
import pandas as pd
df = pd.read_csv('新生数据.csv', encoding='GBK')
```
接下来,我们需要对数据进行处理。首先,我们需要按省份对男女人数进行统计,然后将其转化为堆叠柱形图需要的数据格式。
```python
# 统计各省男女人数
province_data = {}
for i in range(len(df)):
row = df.iloc[i]
province = row['省']
sex = row['性别']
if province not in province_data:
province_data[province] = {'男': 0, '女': 0}
if sex == '男':
province_data[province]['男'] += 1
else:
province_data[province]['女'] += 1
# 转化为堆叠柱形图需要的数据格式
data = {'province': [], 'male': [], 'female': []}
for province in province_data:
data['province'].append(province)
data['male'].append(province_data[province]['男'])
data['female'].append(province_data[province]['女'])
```
最后,我们就可以使用matplotlib库绘制堆叠柱形图:
```python
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 绘制堆叠柱形图
fig, ax = plt.subplots()
ax.bar(data['province'], data['male'], label='男')
ax.bar(data['province'], data['female'], bottom=data['male'], label='女')
ax.set_xlabel('省份')
ax.set_ylabel('人数')
ax.legend()
plt.show()
```
完整代码如下:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 读取CSV文件
df = pd.read_csv('新生数据.csv', encoding='GBK')
# 统计各省男女人数
province_data = {}
for i in range(len(df)):
row = df.iloc[i]
province = row['省']
sex = row['性别']
if province not in province_data:
province_data[province] = {'男': 0, '女': 0}
if sex == '男':
province_data[province]['男'] += 1
else:
province_data[province]['女'] += 1
# 转化为堆叠柱形图需要的数据格式
data = {'province': [], 'male': [], 'female': []}
for province in province_data:
data['province'].append(province)
data['male'].append(province_data[province]['男'])
data['female'].append(province_data[province]['女'])
# 绘制堆叠柱形图
fig, ax = plt.subplots()
ax.bar(data['province'], data['male'], label='男')
ax.bar(data['province'], data['female'], bottom=data['male'], label='女')
ax.set_xlabel('省份')
ax.set_ylabel('人数')
ax.legend()
plt.show()
```
阅读全文