当前位置: 首页 > 后端技术 > Python

两个简单的代码片段来为您的图表制作动画

时间:2023-03-25 23:56:21 Python

我们之前已经写了很多关于数据可视化的文章。但是对于展示来说,如果你的图表是可以移动的,那么它的展示效果会比静态的图表更有冲击力,尤其是需要给领导和客户展示的时候。因此,在本文中,我列出了2个简单的代码片段,可以让您的图表动起来。动画Python中有很多用于绘制图形的库。Matplotlib、Seaborn、Bokeh、Plotly等。但是我们画图的目的是传达给观众和信息。如果您的图形可以移动,那么它们一定会给观众留下第一眼的印象。但并非每个图形或数据集都适合动画。一般来说,动画对于时间序列来说效果很好。例如,根据时间变化比较数据。PlotlyExpressPlotlyExpress,可以直接为我们创建动态图表:importplotly.expressaspximportpandasaspdimportnumpyasnp让我们在数据集中创建一些值。df=pd.DataFrame({'week':np.random.randint(1,21,size=200),'P1':np.random.randint(10,220,size=200),'P2':np.random.randint(15,200,size=200),'P3':np.random.randint(10,490,size=200),'P4':np.random.randint(10,980,size=200)})df=pd.DataFrame({'week':np.random.randint(1,21,size=200),'P1':np.random.randint(10,220,size=200),'P2':np.random.randint(15,200,size=200),'P3':np.random.randint(10,490,size=200),'P4':np.random.randint(10,980,size=200)})现在我们可以画一个动画图来看看产品按周变化。创建散点图动画同样简单。fig=px.scatter(df,x="week",y="sales",animation_frame="week",animation_group="product",size="sales",color="product",hover_name="product",range_x=[0,20],range_y=[0,800])fig.update_layout(height=600,width=1000)gif库如果你和我一样是matplot和seaborn的粉丝,又不喜欢用Plotly,那么你可以试试这个图书馆。这个库所做的是创建一系列图并将它们放入一系列帧中并创建动态gif。首先,让我们获取一些用于绘图的时间序列数据。importseabornassnsdf=sns.load_dataset('flights')接下来创建一个函数,为每个观察创建一个图。@gif.framedefplot_flights(df,i):df=df.copy()#获取绘图标题的年份yr=df['year'][i]#强制X轴立即完全绘制df.iloc[i:]=np.nan#Plotax=df.plot(x='month',y='passengers',legend=False,style="o-",figsize=(20,10))ax.set_title(f"AirPassengers{yr}",size=20)ax.set_xlabel("Months")ax.set_ylabel("NumberofPassengers")@gif.frame是GIF库用来创建帧序列的装饰器.df.iloc[i:]=np.nan会将所有未来数据转换为NA。这是一种一次只绘制一个值的编程方式(i=0都是nan,i=1,只绘制索引0,i=2,只绘制0和1...),这样我们就可以结束端到端地绘制X轴,因为它在动画期间不会改变。这也使图表的大小保持不变,使其更易于观看。现在我们使用创建帧的函数创建一个循环。frames=[]foriinrange(df.shape[0]):frame=plot_flights(df,i)frames.append(frame)最后,保存生成的GIF图像。gif.save(frames,'gif_example.gif',duration=180)看,是不是很简单?最后总结一下,动画图片是一种影响很大的展示方式,但并不是所有的图片都适合做动画。我们应该根据实际情况来选择是否制作动图,因为动图并不是深入分析的最佳选择,它只是视觉冲击力更大一些,所以当你需要观察、比较、理解的时候,或许静态图是更好的选择。要创建动画,我建议您使用gif库,因为对于这种类型的图形,它比plotly更简单(因为我个人更喜欢seaborn,哈)。https://avoid.overfit.cn/post/637663df44424791be062139a71ab00a作者:GustavoSantos