python条形竞赛图

看到同事用tableau做了条形竞赛图,想用python实现一下

什么是条形图竞赛?

        条形图竞赛是一系列动画的条形图,显示了不同时间点的数据值。条形图在每个时间段都会重新定位,以便它们保持顺序(升序或降序)。

效果图

1.数据预处理

用pandas预处理数据,将数据处理成以下样子

数据预处理

数据预处理需要注意以下三点:

1.每行代表一个时间段

2.每列均包含特定类别的值

3.索引包含时间部分


2.时间段之间的过渡条平滑

        在做过渡之前,可以抽一天的数据看一下展示效果

随机抽一天的数据

        注意中文乱码处理

        在动画中将每一天用作单个帧将无法很好地工作,因为它无法捕获从一个时间段到下一个时间段的过渡。为了过渡更改位置的柱形图,我们需要在我们拥有的日期之间添加额外的数据行。

        1.重置索引列

        data_res1 = data_res1.reset_index()

        2.将索引列按一定步长扩充

        data_res1.index = data_res1.index * 5

        3.排序一下索引列

        last_idx = data_res1.index[-1] + 1

        df_expanded = data_res1.reindex(range(last_idx))

        结果如下:

        4.将时间再次设置为索引

        df_expanded['c_day'] = df_expanded['c_day'].fillna(method='ffill')

        df_expanded = df_expanded.set_index('c_day')

        5.增加一个rank dataframe来用作y轴排序

        df_rank_expanded = df_expanded.rank(axis=1, method='first')

            6.分别为两个df填充空值

            df_expanded = df_expanded.interpolate()

            df_rank_expanded = df_rank_expanded.interpolate()

            7.绘制第一天到第二天的每个步骤

扩充后两天数据的连续性

3.绘制动画

绘制动漫代码

用html展示或者保存为gif或者视频:

from IPython.display import HTML

html = anim.to_html5_video()

HTML(html)



完整代码:https://github.com/zxqshahn/something_instereing/blob/master/bar_chart_race.py

你可能感兴趣的:(python条形竞赛图)