Python读取‘新生数据.xls’,绘制各省男女人数堆叠柱形图(横坐标为各省,纵坐标为人数
时间: 2023-05-23 18:03:36 浏览: 83
ChitGPT: 你可以使用 pandas 和 matplotlib 库来实现。
代码示例:
```python
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_excel('新生数据.xls')
data = data.groupby('省份')['男', '女'].sum()
plt.figure(figsize=(12,6))
plt.title('各省男女人数堆叠柱形图', fontsize=16)
plt.bar(data.index, data['男'], color='blue', label='男')
plt.bar(data.index, data['女'], bottom=data['男'], color='red', label='女')
plt.xticks(rotation=45)
plt.legend()
plt.show()
```
请注意将 `'新生数据.xls'` 替换为实际文件路径。
相关问题
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()
```
Python读取‘新生数据.xls’,绘制各省男女人数堆叠柱形图(横坐标为各省,纵坐标为人数)
您好,以下为Python读取‘新生数据.xls’,绘制各省男女人数堆叠柱形图的代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取Excel文件
df = pd.read_excel('新生数据.xls')
# 按省份对男性和女性人数进行分组求和
grouped_data = df.groupby(['省份', '性别']).agg({'人数': 'sum'}).unstack()
# 绘制堆叠柱状图
grouped_data.plot(kind='bar', stacked=True)
# 设置图表标题和横纵坐标标签
plt.title("各省男女人数堆叠柱形图")
plt.xlabel("省份")
plt.ylabel("人数")
# 显示图表
plt.show()
```
希望以上代码可以帮到您!
阅读全文