以此:使用上述数据,生成标题为“不同性别专业招生人数分布图”的并列柱状图。(含数据标签,要求柱状图宽度为0.5,坐标轴刻度线在柱状图最右侧)写出实验步骤
时间: 2024-03-27 18:40:05 浏览: 72
好的,根据您的要求,我将提供一些步骤来绘制不同性别专业招生人数分布图的并列柱状图:
1. 导入必要的库:`pandas` 和 `matplotlib.pyplot`。
2. 准备数据:根据您的数据给出一个字典,其中包含各专业的总人数和男生占比。将其转换为 pandas DataFrame 对象。
3. 计算女生人数:根据总人数和男生占比,计算出女生人数。
4. 绘制柱状图:使用 DataFrame 对象的 `plot()` 方法绘制并列柱状图。
5. 设置图形样式:设置横轴、纵轴标签、图例和标题等。
下面是具体的代码实现:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 准备数据
data = {
'系别': ['计算机系', '机械系', '管理系', '社科系', '信管系'],
'总人数': [1200, 1100, 2000, 500, 2400],
'男生占比': [0.65, 0.7, 0.5, 0.7, 0.6]
}
df = pd.DataFrame(data)
# 计算女生人数
df['女生人数'] = df['总人数'] * (1 - df['男生占比'])
# 绘制柱状图
ax = df.plot(kind='bar', x='系别', y=['男生占比', '女生人数'], width=0.5)
# 设置图形样式
ax.set_xlabel('系别')
ax.set_ylabel('人数')
ax.set_title('不同性别专业招生人数分布图')
ax.legend(['男生', '女生'], loc='upper right')
# 添加数据标签
for i, v in enumerate(df['总人数']):
ax.text(i-0.2, v+50, str(v), color='black', fontweight='bold')
for i, v in enumerate(df['男生占比']):
ax.text(i-0.2, v*df['总人数'][i]+50, '{:.0%}'.format(v), color='black', fontweight='bold')
for i, v in enumerate(df['女生人数']):
ax.text(i+0.3, v+50, str(v), color='black', fontweight='bold')
# 将坐标轴刻度线移至柱状图最右侧
ax.spines['right'].set_position(('data', len(df)))
# 显示图形
plt.show()
```
在这个例子中,我们首先通过字典创建了一个 pandas DataFrame 对象,其中包含了各专业的总人数和男生占比。然后,我们根据总人数和男生占比计算出了女生人数,并将其作为一个新的列添加到了 DataFrame 对象中。接下来,我们使用 DataFrame 对象的 `plot()` 方法绘制并列柱状图,并通过设置 `width=0.5` 使得柱状图的宽度为 0.5。最后,我们设置了图形的标签、图例和标题,并添加了数据标签。在添加数据标签时,我们使用了 `enumerate()` 函数获取了每个柱子的索引和值,并使用 `ax.text()` 方法添加了数据标签。同时,我们使用 `ax.spines['right'].set_position(('data', len(df)))` 将坐标轴刻度线移至柱状图最右侧。最后,我们使用 `plt.show()` 方法显示图形。
阅读全文