【内部资料】python统计图:CSP-J/S 2023第二轮入门级各省一等评级分数线及获奖人数
作者:野牛程序员:2023-11-21 17:58:14python阅读 2734
【内部资料】python统计图:CSP-J/S 2023第二轮入门级各省一等评级分数线及获奖人数
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from collections import OrderedDict
data = OrderedDict({
'重庆': {'总人数': 182, '分数线': 250, '获奖人数': 182},
'浙江': {'总人数': 475, '分数线': 225, '获奖人数': 475},
'广东': {'总人数': 612, '分数线': 210, '获奖人数': 612},
'上海': {'总人数': 298, '分数线': 205, '获奖人数': 298},
'江苏': {'总人数': 341, '分数线': 205, '获奖人数': 341},
'四川': {'总人数': 254, '分数线': 205, '获奖人数': 254},
'香港': {'总人数': 10, '分数线': 200, '获奖人数': 10},
'北京': {'总人数': 430, '分数线': 200, '获奖人数': 430},
'安徽': {'总人数': 365, '分数线': 195, '获奖人数': 365},
'福建': {'总人数': 409, '分数线': 180, '获奖人数': 409},
'山东': {'总人数': 280, '分数线': 170, '获奖人数': 280},
'江西': {'总人数': 76, '分数线': 170, '获奖人数': 76},
'河北': {'总人数': 216, '分数线': 170, '获奖人数': 216},
'湖南': {'总人数': 368, '分数线': 145, '获奖人数': 368},
'吉林': {'总人数': 52, '分数线': 135, '获奖人数': 52},
'天津': {'总人数': 106, '分数线': 130, '获奖人数': 106},
'湖北': {'总人数': 192, '分数线': 120, '获奖人数': 192},
'辽宁': {'总人数': 80, '分数线': 115, '获奖人数': 80},
'澳门': {'总人数': 10, '分数线': 110, '获奖人数': 10},
'河南': {'总人数': 200, '分数线': 110, '获奖人数': 200},
'黑龙江': {'总人数': 48, '分数线': 110, '获奖人数': 48},
'陕西': {'总人数': 186, '分数线': 105, '获奖人数': 186},
'海南': {'总人数': 104, '分数线': 100, '获奖人数': 104},
'山西': {'总人数': 246, '分数线': 95, '获奖人数': 246},
'贵州': {'总人数': 109, '分数线': 95, '获奖人数': 109},
'云南': {'总人数': 116, '分数线': 90, '获奖人数': 116},
'宁夏': {'总人数': 32, '分数线': 90, '获奖人数': 32},
'广西': {'总人数': 195, '分数线': 90, '获奖人数': 195},
'新疆': {'总人数': 114, '分数线': 90, '获奖人数': 114},
'甘肃': {'总人数': 36, '分数线': 90, '获奖人数': 36},
'内蒙古': {'总人数': 58, '分数线': 90, '获奖人数': 58},
'青海': {'总人数': 1, '分数线': 90, '获奖人数': 1}
})
# 指定字体文件路径
font_path = r"c:\\windows\\fonts\\simsun.ttc"
font = FontProperties(fname=font_path, size=12)
# 设置默认字体
plt.rcParams['font.sans-serif'] = ['SimSun']
# 绘制柱形图
fig, ax1 = plt.subplots()
bars1 = ax1.bar(data.keys(), [item['分数线'] for item in data.values()], color='green', label='分数线')
ax1.set_xlabel('省份', fontproperties=font)
ax1.set_ylabel('分数线', fontproperties=font)
ax1.tick_params(axis='y', labelcolor='green')
ax2 = ax1.twinx()
bars2 = ax2.bar(data.keys(), [item['获奖人数'] for item in data.values()], color='blue', label='获奖人数', alpha=0.5)
ax2.set_ylabel('获奖人数', fontproperties=font)
ax2.tick_params(axis='y', labelcolor='blue')
# 在每个柱形条上方显示获奖人数
for bar, num in zip(bars2, [item['获奖人数'] for item in data.values()]):
yval = bar.get_height()
ax2.text(bar.get_x() + bar.get_width() / 2, yval, int(num), ha='center', va='bottom', fontsize=8, color='black')
# 添加图例
ax1.legend(loc='upper left', bbox_to_anchor=(0.73, 0.95), prop=font)
ax2.legend(loc='upper left', bbox_to_anchor=(0.73, 0.88), prop=font)
# 自动调整布局,避免文字被裁剪
plt.tight_layout()
# 显示图形
plt.show()野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

