python编程根据‘新生数据.xls’,分别绘制: 男生身高分布直方图和拟合曲线; 女生身高分布直方图和拟合曲线; 各省男女身高柱形图(横坐标为各省,纵坐标为身高); 各省男女人数堆叠柱形图(横坐标为各省,纵坐标为人数) 要求: 创建带有2行2列子图的窗口以显示上述4图,合理布局图大小。
时间: 2023-05-26 16:05:27 浏览: 221
由于本题需要读取Excel文件和绘制多张图表,建议使用pandas和matplotlib库来完成。
以下是代码实现:
```python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 读取Excel数据
df = pd.read_excel('新生数据.xlsx')
# 绘制男生身高分布直方图和拟合曲线
male_df = df[df['性别'] == '男']
sns.displot(data=male_df, x='身高', kde=True)
plt.title('Male Height Distribution')
plt.xlabel('Height (cm)')
plt.ylabel('Count')
# 绘制女生身高分布直方图和拟合曲线
female_df = df[df['性别'] == '女']
sns.displot(data=female_df, x='身高', kde=True)
plt.title('Female Height Distribution')
plt.xlabel('Height (cm)')
plt.ylabel('Count')
# 绘制各省男女身高柱形图
province_df = df.groupby(['省份', '性别'])['身高'].mean().unstack()
province_df.plot(kind='bar')
plt.title('Average Height by Province')
plt.xlabel('Province')
plt.ylabel('Height (cm)')
# 绘制各省男女人数堆叠柱形图
count_df = df.groupby(['省份', '性别'])['身高'].count().unstack()
count_df.plot(kind='bar', stacked=True)
plt.title('Student Count by Province and Gender')
plt.xlabel('Province')
plt.ylabel('Count')
# 设置图表窗口布局
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(12, 8))
# 将前两张图表添加到第一行的子图区域中
axs[0][0].set_aspect('equal')
plt.sca(axs[0][0])
sns.displot(data=male_df, x='身高', kde=True)
plt.title('Male Height Distribution')
plt.xlabel('Height (cm)')
plt.ylabel('Count')
axs[0][1].set_aspect('equal')
plt.sca(axs[0][1])
sns.displot(data=female_df, x='身高', kde=True)
plt.title('Female Height Distribution')
plt.xlabel('Height (cm)')
plt.ylabel('Count')
# 将后两张图表添加到第二行的子图区域中
axs[1][0].set_aspect('equal')
plt.sca(axs[1][0])
province_df.plot(kind='bar')
plt.title('Average Height by Province')
plt.xlabel('Province')
plt.ylabel('Height (cm)')
axs[1][1].set_aspect('equal')
plt.sca(axs[1][1])
count_df.plot(kind='bar', stacked=True)
plt.title('Student Count by Province and Gender')
plt.xlabel('Province')
plt.ylabel('Count')
plt.tight_layout()
plt.show()
```
代码解析:
首先使用pandas库的`read_excel`函数读取Excel文件,得到一个DataFrame对象。
然后,使用seaborn库的`displot`函数分别绘制男生和女生的身高分布直方图,并设置显示拟合曲线。接下来,使用pandas库的`groupby`函数按照省份和性别对数据进行分组,并计算不同省份和性别的学生平均身高和人数。最后,使用matplotlib库的`plot`函数绘制各省男女身高和人数的柱形图。
为了显示多张图片,我们创建了一个`2x2`的子图的窗口,并将前两张图放在第一行的子图区域中,后两张图放在第二行的子图区域中。使用matplotlib库的`tight_layout`函数调整图表的布局。
最后,使用`show`函数显示图表。
阅读全文