【yingchao】

时间:2020-11-4 作者:菜鸟编辑

基于Python的图表绘图系统matplotlib,“动态条形图”你了解吗?

动态条形图已经流行了一段时间,尤其是动态条形图,这些动态条形图比较了多年来这些国家的GDP或军事实力,伴随着动听的音乐,注视着中国从高到低的排名。爱国者。在我为提高国家实力做出了不可磨灭的贡献的前提下,那种具有集体荣誉感的人感到非常兴奋和自豪。

尽管我没有为提高国家实力做出任何不可磨灭的贡献,但我可以探索如何绘制动态条形图,该条形图应视为传播知识(笑和哭)。

查看并选择符合要求的数据

首先查看数据。仍然是每个英超球队的积分数据。要制作动态条形图,数据量要求会稍大。对于具有时间维度的数据,时间越长,可以反映出来。会有更多更改和更多信息。在这里,我们仅选择2010年至2019年英超联赛球队的积分数据。该数据量虽然不大,但不会影响学习原则和实施步骤。

每年选择前十名球队以输入数据集。最终数据集如下所示:

让我们逐步进行,首先绘制一个简单的条形图,例如绘制2019年排名前十的团队的条形图,准备数据,提取2019年的数据,然后排序并选择排名前十的团队团队数据的名字,具体代码如下:

year = 2019dff =(df_t [df_t [“ year”]。eq(year)] .sort_values(by ="Integral",ascending = True).tail(10))dff

结果:

在一个简单的解释下,这里没有复杂的代码。它们都是常用语法,除了df.eq()以外。此方法主要用于比较,并且提取df中满足方括号中变量要求的数据。原始数据包含2010年至2019年的所有数据。此处仅需要2019年,因此以这种方式提取了2019年的数据。

以下排序语法选择升序排序,因此得分最少的团队排名第一,因此要选择排名前十的团队,您不能使用head(10),而可以使用tail(10)。选择最后10行。进行此操作的原因是,在绘制过程中,条形图是从下到上绘制的。为了从下到上对条进行排序,条变得越来越长,因此采用此操作。

让我们看一下从上面截取的数据集中绘制的条形图是什么样的:

plt.figure(figsize =(10,6))plt.barh(dff ["team"],dff ["points"]);

好的,绘制了符合要求的条形图!

设置条形颜色

如果您未设置颜色,则所有绘制的条形都将是一种颜色,就像上面的图片一样。

为了使图形更加美观,每个团队的得分变化看起来更加明显,必须设置颜色。这里有两个选择。一种是为排名设置颜色,也就是说,无论哪个队排名第一,只要排名第一,就会分配该颜色;另一种是为每个团队分配颜色,无论这支球队的排名是多少,它的颜色不会改变。

实践证明,第二种方法较为复杂,但更易于接受,因此这里使用第二种方法设置颜色。

名称= df_t10。 Team.unique()#查看前十名球队的名称

总共24个团队的返回结果:

array(["Manchester United","Chelsea","Man City","Arsenal","Tottenham","Liverpool","Everton","Fulham","AstonvillePull","Sunderland","Newcastle","West Bromwich Albion","Swansea","West Ham United","Southampton","Stoke City","Crystal Palace",“莱斯特”,“伯恩茅斯”,“西布朗”,“伯恩利”,“莱斯特城”,“狼队”,“谢菲尔德联队”],dtype = object)

产生24种不同的颜色:

将matplotlib.cm作为cmc = []导入范围内的我(len(名称)):c.append(cm.nipy_spectral(float(i)/ len(names)))colors1 = dict(zip(names ),c))#每个小组对应一个颜色

由于颜色种类繁多,因此一一指定需要太多时间和精力,因此引入了matplotlib.cm色谱,cm.nipy_spectral()函数,并且可以使用不同的浮点数分配以生成不同的颜色。

plt.figure(figsize =(12,6))#将不同的颜色添加到不同的条形时,请注意颜色列表有24种颜色。您不能直接使颜色等于范围i中的颜色列表(len(dff)):plt.barh(dff ["team"]。iloc [i],dff ["points"]。iloc [i],color = colors1 [dff ["team"]。iloc [i],alpha = 0.5)#将年份添加到画布plt.text(1,0.4,current_year,transform = ax.transAxes,size = 46,ha ="right",alpha = 0.5)的右边;

效果图:

实现动画

实际上,每个人都知道所谓的视频也由图片的帧组成以形成视频,而我们的动画使用此原理,因此我们只需要封装用于绘制条形图的代码即可一个函数,然后反复调用此函数以在不同数据集上绘制图形以实现动态显示。

今日推荐

八强战第二日看点:葡萄牙团结战黑马,英格兰怎防姆巴佩

8进4第一日比拼实在是激烈,两组对话都拖到了比赛末尾才分出胜负的,可看出剩余各队实力之好、晋级欲望之强。因此,第二日的比拼必然也会如此,各队要给足准备稳住心态。率先登台的葡萄牙兵强马壮,遇到摩洛哥,被