Python matplotlib绘制柱状图
前面的文章介绍了使用matplotlib绘制折线图和散点图,本篇文章继续介绍使用matplotlib绘制柱状图。
一、数据准备
本篇文章使用S10总决赛从8强开始各位置的数据。每一局数据的第一个列表都是胜方数据,第二个列表都是负方数据。
二、matplotlib绘制柱状图
运行结果:
bar(): matplotlib中绘制柱状图的函数。可以传入很多参数,一般传入三个参数,前两个参数传入柱状图的x值列表和y值列表,第三个传入关键字参数width='宽度',宽度一般使用0~1之间的数据。其他参数根据需要添加,如设置颜色的color参数。
mean(): numpy中用于计算平均值的函数,可以用于计算一个数组的平均值,数据可以是列表,也可以是嵌套结构的列表。
round(): Python内置函数,用于处理浮点数的小数位数。
zip(): Python内置函数,用于将可迭代对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
text(): matplotlib中用于设置柱状图的数据标注的方法。前两个参数用于设置数据标注显示的位置,第三个参数用于设置数据标注显示的内容。其他参数根据需要添加,如ha参数用于设置标注的左右位置,'center', 'right', 'left',va参数用于设置标注的上下位置,'top', 'bottom', 'center', 'baseline', 'center_baseline'。
柱状图主要用于绘制离散的数据,通过柱状图的高度能够一眼看出各个数据的大小关系,比较数据之间的差别。
上面的柱状图中,绘制的是S10总决赛从8强到决赛的所有比赛中,各位置(包含胜方和负方)的平均击杀数据。通过柱状图,各位置的击杀数大小关系一目了然。
上面的代码中,前面很大一部分都是在解析数据,图形中只用到了数据中的击杀数据,展示了各位置的场均击杀数。接下来使用多组柱状图来展示各位置更全面的数据。
三、matplotlib绘制多组柱状图
运行结果:
要在同一张图像中绘制多组柱状图,多次调用bar()函数即可。这样的场景非常多,如本文中比较S10总决赛各位置的数据,除了比较击杀数,将死亡数和助攻数一起比较会更合理。
绘制多组柱状图时,要对柱状图的x轴进行调整,如有三组柱状图,左边一组的x轴要左移,右边一组的x轴要右移,移动的距离是中间一组柱状图的宽度。一般情况下,三组柱状图的宽度相等。
对于多组柱状图,一般同一组使用相同的颜色,展示效果会更好。并且设置好图例对不同颜色的柱状图做好说明。
从这张图像来看,打野、中单、下路的数据差异不大,与上路和辅助对比,比较吻合游戏中的定位。不过这张图中的数据是胜方和负方数据的均值,为了更准确地分析各位置对胜利的贡献,可以将胜方和负方的数据分开,比较对位数据。
四、matplotlib绘制多张多组柱状图
运行结果:
subplots(): 用于在同一张图像中绘制多张图表,包含折线图、散点图和柱状图等。通过nrows, ncols两个参数设置图表的张数和排列方式。subplots()函数返回两个参数,一个是图像对象fig,一个是可迭代的图表数组axs(类型为numpy中的数组对象)。绘制每一张图表时,从axs中取出每一张图表对象,再调用bar()函数绘制柱状图,要在一张图表中绘制多组柱状图,多次调用bar()函数即可。
每一张图表中的标签、标题、样式、图例等都需要单独设置。在设置坐标轴、标签、标题时,使用'set_'开头的方法进行设置,如设置x轴标签用set_xlabel()。
因为matplotlib版本的原因,在matplotlib3.2后,设置x轴的刻度标签时,需要导入matplotlib中的ticker模块,使用ticker模块中的FixedLocator和FixedFormatter两个类来设置x轴的刻度显示指定的值,否则x轴的刻度只能显示绘图时的数字1,2,3...,使用set_xticks()和set_xticklabels()都不能实现。
最后,将数据中的胜方和负方分开比较,可以看出对位数据最好的位置是中路,其次是打野。这就是使用matplotlib绘制柱状图的简单介绍,需要进行更多比较和分析可以做更多尝试。