Python可视化库Matplotlib的动态可视化实践中,除了实现动态排序图,还有一种不该错过的图形就是动态折线图,通过折线图来营造出你追我赶的热闹场面,看尽事件的变迁,和条形图相比各有特色。
绘制代码如下:
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))
关于动态排序图可以看自己的另一篇文章,效果如下: