现在有六类学科,分别是语文数学英语物理化学生物,男生这六科的平均成绩分别为85.5、91、72、59、66、55,女生这六科平均成绩分别为94、82、89.5、62、49、53,麻烦帮我用python绘制柱形图和堆积柱形图,这两个柱形图的x轴都是学科,y轴都是平均成绩
时间: 2024-09-28 10:14:00 浏览: 57
当然可以。在Python中,我们可以使用matplotlib库来创建柱状图。这里是一个简单的例子,首先需要安装`matplotlib`,如果你还没安装,可以用`pip install matplotlib`来安装。
为了绘制这个图形,我们将创建两个函数,一个用于普通柱状图,另一个用于堆积柱状图。假设数据已经存储在一个列表里,每个元素包含两个值:学科名称和对应的成绩,例如:
```python
import matplotlib.pyplot as plt
# 学生成绩数据
male_scores = [['语文', 85.5], ['数学', 91], ['英语', 72], ['物理', 59], ['化学', 66], ['生物', 55]]
female_scores = [['语文', 94], ['数学', 82], ['英语', 89.5], ['物理', 62], ['化学', 49], ['生物', 53]]
def draw_bar_chart(data, title, gender):
x = [d[0] for d in data]
y = [d[1] for d in data]
plt.bar(x, y)
plt.title(f"{gender}生各科平均成绩")
plt.xlabel('学科')
plt.ylabel('平均成绩')
plt.show()
# 分别绘制男女生的柱状图
draw_bar_chart(male_scores, '男生平均成绩', 'Male')
draw_bar_chart(female_scores, '女生平均成绩', 'Female')
# 绘制堆积柱状图
def draw_stacked_bar_chart(scores, gender):
x, labels = zip(*scores)
male_data, female_data = zip(*male_scores), zip(*female_scores)
plt.stackplot(x, male_data, female_data, labels=['男生', '女生'])
plt.title(f"{gender}生各科平均成绩对比")
plt.xlabel('学科')
plt.ylabel('平均成绩')
plt.legend()
plt.show()
# 绘制男女生的堆积柱状图
draw_stacked_bar_chart([male_scores, female_scores], '男女对比')
```
这两个函数分别会生成两个图表,一个是普通柱状图,显示了男女生各自各科的平均成绩;另一个是堆积柱状图,展示了各个学科男女生平均成绩的总和。
阅读全文