当前位置:首页python > 正文

【内部资料】python统计图:CSP-J/S 2023第二轮入门级各省一等评级分数线及获奖人数

作者:野牛程序员:2023-11-21 17:58:14python阅读 2531

【内部资料】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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击