【内部资料】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
