一、画图常用的技巧
????本文主要对pyplot画图常用的技巧进行总结,主要包括设置横纵坐标范围,设置横纵坐标间距,为图中点添加相应数值。
??1.1 设置横纵坐标范围
????以2020年~2022年西华/西交/电科/川大复试线为例,
YEARS = [2018, 2019, 2020, 2021, 2022]
XiHua_z = [264, 263, 279]
XiHua_x = [264, 263, 273]
XiJiao_z = [350, 360, 370]
XiJiao_x = [350, 320, 363]
DianKe_z = [285, 300, 300]
DianKe_x = [340, 350, 340]
ChuanDa_z = [340, 364, 350]
ChuanDa_x = [325, 348, 330]
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(YEARS[-3:], XiHua_z, marker='*', markersize=7, c='k', linewidth=1.5)
plt.plot(YEARS[-3:], XiJiao_z, marker='d', markersize=7, c='c', linewidth=1.5)
plt.plot(YEARS[-3:], DianKe_z, marker='.', markersize=7, c='b', linewidth=1.5)
plt.plot(YEARS[-3:], ChuanDa_z, marker='x', markersize=7, c='g', linewidth=1.5)
plt.xlabel('年份', fontdict={'fontsize': 12})
plt.ylabel('分数', fontdict={'fontsize': 12})
plt.title('近3年西交/电科/川大专硕复试分数线', fontdict={'fontsize':12})
plt.legend(['西华-信息学院-电子信息(专硕)', '西交-信息学院-电子信息(专硕)', '电科-信通学院-电子信息(专硕)', '川大-电信学院-电子信息(专硕)'])
plt.subplot(1, 2, 2)
plt.plot(YEARS[-3:], XiHua_x, marker='*', markersize=7, c='k', linewidth=1.5)
plt.plot(YEARS[-3:], XiJiao_x, marker='d', markersize=7, c='c', linewidth=1.5)
plt.plot(YEARS[-3:], DianKe_x, marker='.', markersize=7, c='b', linewidth=1.5)
plt.plot(YEARS[-3:], ChuanDa_x, marker='*', markersize=7, c='g', linewidth=1.5)
plt.xlim([2020, 2022])
plt.ylim([200, 500])
plt.xlabel('年份', fontdict={'fontsize': 12})
plt.ylabel('分数', fontdict={'fontsize': 12})
plt.title('近3年西交/电科/川大学硕复试分数线', fontdict={'fontsize':12})
plt.legend(['西华-信息学院-信通(学硕)', '西交-信息学院-信通(学硕)', '电科-信通学院-信通(学硕)', '川大-电信学院-信通(学硕)'])
plt.show()
???? 左边子图未设置横纵坐标范围,导致图例的位置出现在中部;右子图为设置横纵坐标范围后得到的结果。 ???? 注意:上图横坐标年份出现小数点,不符合规范,可通过设置横纵坐标间距解决该问题。
??1.2 设置横纵坐标间距
YEARS = [2018, 2019, 2020, 2021, 2022]
XiHua_z = [264, 263, 279]
XiHua_x = [264, 263, 273]
XiJiao_z = [350, 360, 370]
XiJiao_x = [350, 320, 363]
DianKe_z = [285, 300, 300]
DianKe_x = [340, 350, 340]
ChuanDa_z = [340, 364, 350]
ChuanDa_x = [325, 348, 330]
ChuanDa_z = [340, 364, 350]
ChuanDa_x = [325, 348, 330]
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(YEARS[-3:], XiHua_z, marker='*', markersize=7, c='k', linewidth=1.5)
plt.plot(YEARS[-3:], XiJiao_z, marker='d', markersize=7, c='c', linewidth=1.5)
plt.plot(YEARS[-3:], DianKe_z, marker='.', markersize=7, c='b', linewidth=1.5)
plt.plot(YEARS[-3:], ChuanDa_z, marker='x', markersize=7, c='g', linewidth=1.5)
plt.xlim([2020, 2022])
plt.ylim([200, 500])
plt.xlabel('年份', fontdict={'fontsize': 12})
plt.ylabel('分数', fontdict={'fontsize': 12})
plt.title('近3年西交/电科/川大专硕复试分数线', fontdict={'fontsize':12})
plt.legend(['西华-信息学院-电子信息(专硕)', '西交-信息学院-电子信息(专硕)', '电科-信通学院-电子信息(专硕)', '川大-电信学院-电子信息(专硕)'])
plt.subplot(1, 2, 2)
plt.plot(YEARS[-3:], XiHua_x, marker='*', markersize=7, c='k', linewidth=1.5)
plt.plot(YEARS[-3:], XiJiao_x, marker='d', markersize=7, c='c', linewidth=1.5)
plt.plot(YEARS[-3:], DianKe_x, marker='.', markersize=7, c='b', linewidth=1.5)
plt.plot(YEARS[-3:], ChuanDa_x, marker='*', markersize=7, c='g', linewidth=1.5)
ax = plt.gca()
x_space = MultipleLocator(1)
ax.xaxis.set_major_locator(x_space)
ay = plt.gca()
y_space = MultipleLocator(25)
ay.yaxis.set_major_locator(y_space)
plt.xlim([2020, 2022])
plt.ylim([200, 500])
plt.xlabel('年份', fontdict={'fontsize': 12})
plt.ylabel('分数', fontdict={'fontsize': 12})
plt.title('近3年西交/电科/川大学硕复试分数线', fontdict={'fontsize':12})
plt.legend(['西华-信息学院-信通(学硕)', '西交-信息学院-信通(学硕)', '电科-信通学院-信通(学硕)', '川大-电信学院-信通(学硕)'])
plt.show()
???? 左边子图未设置横纵坐标间距,导致横坐标年份出现小数;右子图为设置横纵坐标间距后得到的结果。 ???? 注意:上面所有示例均仅能得到各年份复试分数线的趋势,无法从图中准确获悉各年份具体的录取分数,可通过为图中点设置相应数值解决。
??1.3 为图中点设置相应数值
????以2018年~2022年全国考研报名/录取人数为例,
YEARS = [2018, 2019, 2020, 2021, 2022]
NUMS_B = [238, 290, 341, 377, 457]
NUMS_L = [76.25, 81.13, 110.66, 117.7]
plt.figure(figsize=(5, 4))
plt.plot(YEARS, NUMS_B, marker='.', markersize=7, c='b', linewidth=1.5)
plt.plot(YEARS[:4], NUMS_L, marker='d', markersize=7, c='r', linewidth=1.5)
ax = plt.gca()
x_space = MultipleLocator(1)
ax.xaxis.set_major_locator(x_space)
for x,y in zip(YEARS,NUMS_B):
plt.text(x, y+7, '%.0f' % y, ha='center', va='bottom', fontdict={'fontsize': 12})
for x, y in zip(YEARS[:4], NUMS_L):
plt.text(x, y + 8, '%.0f' % y, ha='center', va='bottom', fontdict={'fontsize': 12})
plt.xlabel('年份/年', fontdict={'fontsize': 12})
plt.ylabel('人数/万', fontdict={'fontsize': 12})
plt.ylim([0, 500])
plt.title('近5年考研报名/录取人数', fontdict={'fontsize':12})
plt.legend(['报名人数', '录取人数'])
plt.show()
????备注,常用的marker: 'D', 'd', 'o', '.', '*', '^', 'v'; 常用的颜色:'c', 'r', 'g', 'k', 'b'
二、参考链接
???? 1、Matplotlib常见图形绘制 ???? 2、订单可视化分析 ???? 3、常用marker、线型和颜色
|