淘先锋技术网

首页 1 2 3 4 5 6 7

Python可视化库Matplotlib的动态可视化实践中,除了实现动态排序图,还有一种不该错过的图形就是动态折线图,通过折线图来营造出你追我赶的热闹场面,看尽事件的变迁,和条形图相比各有特色。

0eec71d207df2f797698264de29edef8.gif

Python绘制动态折线图

绘制代码如下:

fig,ax=plt.subplots()def race_line(i):    k=['A','B','C'] #只取3个人的数据    x=range(3,i+1)    ax.clear()    for ki in k:        wdf=df.loc[df['tag']==ki]        #筛选出画折线的x,y        y=[list(wdf.loc[wdf['tag']==ki][str(j)])[0] for j in x]        ax.plot(x,y,color=list(wdf['color'])[0])        ax.text(i+0.2,y[-1]+2,'{0}:{1}'.format(ki,y[-1]))        ax.set_xlim(3,i+3)    ax.set_title('ABC Lines Animation')        ax.tick_params(top=True, bottom=False,left=False,right=True,                   labelright=True,labelleft=False,                   labeltop=True, labelbottom=False)amt=anm.FuncAnimation(fig,race_line,frames=range(6,13),interval=500)amt.save('lines-animation-1.gif') #把动图保存为gif文件

绘制三维动态图也是同样的套路,建画布时加上projection="3d"参数,绘图时参数从[x,y]变成[x,y,z],其他按框架来做。

生成数据集的代码如下:

df=pd.DataFrame({'tag':list('ABCDEFG'),'color':['#1EAFAE', '#A3FFFF', '#69FFFF', '#BA5C25', '#FFA069', '#9E5B3A', '#D7CE88']})df['3']=df['tag'].apply(lambda x:random.randint(50,600)) #初始列for i in range(4,13):    idx=str(i-1) #偶数增幅,奇数在原来基础上[-30,50+5*i]变动    df['{0}'.format(i)]=df[idx].apply(lambda x:x+random.randint(20,100+i*6) if x%2==0 else x+random.randint(-30,50+i*5))
a83999c7699b2b4c224957e6aa74d478.png

示例数据集

关于动态排序图可以看自己的另一篇文章,效果如下:

aac90732c342809bee64a6f970fd2933.gif

matplotlib实现动态排序图