分别使用axes()、subplot()函数创建子图,生成2个组合图形,每个组合图形要求包含各学院录取分数平均分的柱形图、各录取省份的占比饼图、各民族录取最高分的折线图。
时间: 2024-11-07 22:29:53 浏览: 11
在matplotlib库中,你可以使用`subplots()`函数创建一个包含多个子图的网格布局,而`axes()`函数则主要用于在同一窗口内添加更多的子图。为了满足你的需求,我们可以这样做:
首先,使用`subplots()`函数创建一个2x2的网格,然后分别在每个子图上绘制所需的数据。这里是一个基本的示例:
```python
import matplotlib.pyplot as plt
import numpy as np
# 假设我们有以下数据
scores = {'学院A': [80, 90, 85, 95], '学院B': [75, 85, 90, 92]}
province_distribution = {'省份A': 40, '省份B': 30, '省份C': 20, '省份D': 10}
ethnicity_highest_scores = {'汉族': 98, '少数民族A': 96, '少数民族B': 97}
fig, axs = plt.subplots(2, 2, figsize=(10, 8)) # 创建2x2子图
# 绘制柱状图
for i, (college, avg_scores) in enumerate(scores.items()):
axs[i // 2, i % 2].bar(college, avg_scores, label='平均分')
axs[i // 2, i % 2].set_title(f'{college}录取平均分')
# 绘制饼图
province_labels = list(province_distribution.keys())
province_values = list(province_distribution.values())
axs[1, 0].pie(province_values, labels=province_labels, autopct='%1.1f%%', title='录取省份分布')
axs[1, 0].axis('equal') # 确保饼图均匀显示
# 绘制折线图
ethnicity_data = sorted(zip(['汉族'] + ['少数民族{}'.format(i+1) for i in range(len(ethnicity_highest_scores)-1)], ethnicity_highest_scores), key=lambda x: x[1], reverse=True)
axs[0, 1].plot(*zip(*ethnicity_data), marker='o', markersize=10, label='最高分')
axs[0, 1].set_title('各民族录取最高分')
axs[0, 1].legend()
plt.tight_layout() # 优化子图之间的间距
plt.show()
```
阅读全文