话不多说,直接上源码,尽量注释了,看不懂的地方欢迎在评论里提问。
效果图如下:
源码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设定字体,不然中文会乱码
plt.rcParams['axes.unicode_minus'] = False # 显示负号
df = pd.read_excel("第一次月考分析表.xlsx")
pinjun = df[['班级', '语文', '数学', '英语', '物理', '化学', '政治', '历史', '总分']].groupby(['班级']).mean().round(1)
labels = ["一班", "二班", "三班", "四班", "五班", "六班", "七班", "八班", "九班", "十班"]
x = np.arange(len(labels))
bar_width = 0.8
# 生成2行4列的多图
fig, axs = plt.subplots(2, 4, figsize=(10, 5), dpi=100)
# 设置图的左上角名称
manager = plt.get_current_fig_manager()
manager.set_window_title("成绩分析表")
# 第一个图
rect1 = axs[0, 0].bar(x, list(pinjun['语文']), width=bar_width, label="语文")
axs[0, 0].set_title('语文成绩对比', fontsize=12)
axs[0, 0].set_xticks(x)
axs[0, 0].set_xticklabels(labels, fontsize=7)
axs[0, 0].bar_label(rect1, fontsize=7, padding=1)
# 第二个图
rect2 = axs[0, 1].bar(x, list(pinjun['数学']), width=bar_width, label="数学", color='cornflowerblue')
axs[0, 1].set_title('数学成绩对比', fontsize=12)
axs[0, 1].set_xticks(x)
axs[0, 1].set_xticklabels(labels, fontsize=7)
axs[0, 1].bar_label(rect2, fontsize=8, padding=1)
# 第三个图
rect3 = axs[0, 2].bar(x, list(pinjun['英语']), width=bar_width, label="英语", color='darkorchid')
axs[0, 2].set_title('英语成绩对比', fontsize=12)
axs[0, 2].set_xticks(x)
axs[0, 2].set_xticklabels(labels, fontsize=7)
axs[0, 2].bar_label(rect3, fontsize=8, padding=1)
# 第四个图
rect4 = axs[0, 3].bar(x, list(pinjun['物理']), width=bar_width, label="物理", color='blueviolet')
axs[0, 3].set_title('物理成绩对比', fontsize=12)
axs[0, 3].set_xticks(x)
axs[0, 3].set_xticklabels(labels, fontsize=7)
axs[0, 3].bar_label(rect4, fontsize=8, padding=1)
# 第五个图
rect5 = axs[1, 0].bar(x, list(pinjun['化学']), width=bar_width, label="化学", color='darkcyan')
axs[1, 0].set_title('语文成绩对比', fontsize=12)
axs[1, 0].set_xticks(x)
axs[1, 0].set_xticklabels(labels, fontsize=7)
axs[1, 0].bar_label(rect5, fontsize=8, padding=1)
# 第六个图
rect6 = axs[1, 1].bar(x, list(pinjun['政治']), width=bar_width, label="政治", color='forestgreen')
axs[1, 1].set_title('政治成绩对比', fontsize=12)
axs[1, 1].set_xticks(x)
axs[1, 1].set_xticklabels(labels, fontsize=7)
axs[1, 1].bar_label(rect6, fontsize=8, padding=1)
# 第七个图
rect7 = axs[1, 2].bar(x, list(pinjun['历史']), width=bar_width, label="历史", color='skyblue')
axs[1, 2].set_title('历史成绩对比', fontsize=12)
axs[1, 2].set_xticks(x)
axs[1, 2].set_xticklabels(labels, fontsize=7)
axs[1, 2].bar_label(rect7, fontsize=8, padding=1)
# 第八个图
rect8 = axs[1, 3].bar(x, list(pinjun['总分']), width=bar_width, label="总分", color='red')
axs[1, 3].set_title('总均分成绩对比', fontsize=12)
axs[1, 3].set_xticks(x)
axs[1, 3].set_xticklabels(labels, fontsize=7)
axs[1, 3].bar_label(rect8, fontsize=8, padding=1)
fig.tight_layout()
plt.show()
,