Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >技巧|Python 制作动态图表的正确方式

技巧|Python 制作动态图表的正确方式

原创
作者头像
码农向前冲
发布于 2021-12-22 03:29:02
发布于 2021-12-22 03:29:02
1.5K2
举报
文章被收录于专栏:Python学习必看Python学习必看

大家好

关于动态图表,相信大家都或多或少的接触过一些,如果是代码水平比较不错的,可以选择 Matplotlib,当然也可以使用 pyecharts 的相关功能,不过这些工具都专注于图表的制作,也就是对于图表的数据,你是需要自行转换的。而今天介绍的这个可视化图库,完美的结合了 Pandas 数据格式,又辅以 Matplotlib 的强大功能,使得我们制作动图变得容易的多了。

图库简介

这款给力的可视化图库,就是 pandas_alive,虽然当前在 GitHub 上的 star 数量不是很高,但是相信凭借其强大的功能,崭露头角也是迟早的事情

项目安装:

与一般的 Python 库一样,直接使用 pip 安装即可,这里有一点需要注意,就是由于是通过 Matplotlib 来制作动图,所以需要手动安装下 Matplotlib 的依赖工具 imagemagick,这是一个图片处理工具,感兴趣的同学可以自行查看下

项目功能:

这款可视化图库,可以支持的图表类型是非常多的,包括动态条形图、动态曲线图、气泡图、饼状图以及地图等等,这些图表差不多可以满足我们日常的使用了

制图简介

这里我们就来简单看一下该如何制作动态图表吧,首先是动态条形图,基本4行代码搞定,有两行还是 import

代码语言:txt
AI代码解释
复制
import pandas_aliveimport pandas as pdcovid_df = pd.read_csv('covid19.csv', index_col=0, parse_dates=[0])covid_df.diff().fillna(0).plot_animated(filename='line_chart.gif',kind='line',period_label={'x':0.25,'y':0.9})

怎么样,是不是超级方便呢

下面我们就来看看其他图表的制作方法吧!

01 动态条形图

代码语言:txt
AI代码解释
复制
import pandas_aliveimport pandas as pdcovid_df = pd.read_csv('covid19.csv', index_col=0, parse_dates=[0])covid_df.plot_animated(filename='examples/perpendicular-example.gif',perpendicular_bar_func='mean')

02 动态柱状图

代码语言:txt
AI代码解释
复制
import pandas_aliveimport pandas as pdcovid_df = pd.read_csv('covid19.csv', index_col=0, parse_dates=[0])covid_df.plot_animated(filename='examples/example-barv-chart.gif',orientation='v')

03 动态曲线图

代码语言:txt
AI代码解释
复制
import pandas_aliveimport pandas as pdcovid_df = pd.read_csv('covid19.csv', index_col=0, parse_dates=[0])covid_df.diff().fillna(0).plot_animated(filename='examples/example-line-chart.gif',kind='line',period_label={'x':0.25,'y':0.9})

04 动态面积图

代码语言:txt
AI代码解释
复制
import pandas_aliveimport pandas as pdcovid_df = pd.read_csv('covid19.csv', index_col=0, parse_dates=[0])covid_df.sum(axis=1).fillna(0).plot_animated(filename='examples/example-bar-chart.gif',kind='bar',        period_label={'x':0.1,'y':0.9},        enable_progress_bar=True, steps_per_period=2, interpolate_period=True, period_length=200)

05 动态散点图

代码语言:txt
AI代码解释
复制
import pandas as pdimport pandas_alivemax_temp_df = pd.read_csv(    "data/Newcastle_Australia_Max_Temps.csv",    parse_dates={"Timestamp": ["Year", "Month", "Day"]},)min_temp_df = pd.read_csv(    "data/Newcastle_Australia_Min_Temps.csv",    parse_dates={"Timestamp": ["Year", "Month", "Day"]},)merged_temp_df = pd.merge_asof(max_temp_df, min_temp_df, on="Timestamp")merged_temp_df.index = pd.to_datetime(merged_temp_df["Timestamp"].dt.strftime('%Y/%m/%d'))keep_columns = ["Minimum temperature (Degree C)", "Maximum temperature (Degree C)"]merged_temp_df[keep_columns].resample("Y").mean().plot_animated(filename='examples/example-scatter-chart.gif',kind="scatter",title='Max & Min Temperature Newcastle, Australia')

06 动态饼图

代码语言:txt
AI代码解释
复制
import pandas_aliveimport pandas as pdcovid_df = pd.read_csv('covid19.csv', index_col=0, parse_dates=[0])covid_df.plot_animated(filename='examples/example-pie-chart.gif',kind="pie",rotatelabels=True,period_label={'x':0,'y':0})

07 动态气泡图

代码语言:txt
AI代码解释
复制
import pandas_alivemulti_index_df = pd.read_csv("data/multi.csv", header=[0, 1], index_col=0)multi_index_df.index = pd.to_datetime(multi_index_df.index,dayfirst=True)map_chart = multi_index_df.plot_animated(    kind="bubble",    filename="examples/example-bubble-chart.gif",    x_data_label="Longitude",    y_data_label="Latitude",    size_data_label="Cases",    color_data_label="Cases",    vmax=5, steps_per_period=3, interpolate_period=True, period_length=500,    dpi=100)

08 动态地理图表

代码语言:txt
AI代码解释
复制
import geopandasimport pandas_aliveimport contextilygdf = geopandas.read_file('data/nsw-covid19-cases-by-postcode.gpkg')gdf.index = gdf.postcodegdf = gdf.drop('postcode',axis=1)map_chart = gdf.plot_animated(filename='examples/example-geo-point-chart.gif',basemap_format={'source':contextily.providers.Stamen.Terrain})

09 行政区域动图

代码语言:txt
AI代码解释
复制
import geopandasimport pandas_aliveimport contextilygdf = geopandas.read_file('data/italy-covid-region.gpkg')gdf.index = gdf.regiongdf = gdf.drop('region',axis=1)map_chart = gdf.plot_animated(filename='examples/example-geo-polygon-chart.gif',basemap_format={'source':contextily.providers.Stamen.Terrain})

10 多动图组合

代码语言:txt
AI代码解释
复制
import pandas_aliveimport pandas as pdcovid_df = pd.read_csv('covid19.csv', index_col=0, parse_dates=[0])animated_line_chart = covid_df.diff().fillna(0).plot_animated(kind='line',period_label=False,add_legend=False)animated_bar_chart = covid_df.plot_animated(n_visible=10)pandas_alive.animate_multiple_plots('examples/example-bar-and-line-chart.gif',[animated_bar_chart,animated_line_chart],    enable_progress_bar=True)

11 城市人口变化

代码语言:txt
AI代码解释
复制
import pandas_aliveurban_df = pandas_alive.load_dataset("urban_pop")animated_line_chart = (    urban_df.sum(axis=1)    .pct_change()    .fillna(method='bfill')    .mul(100)    .plot_animated(kind="line", title="Total % Change in Population",period_label=False,add_legend=False))animated_bar_chart = urban_df.plot_animated(n_visible=10,title='Top 10 Populous Countries',period_fmt="%Y")pandas_alive.animate_multiple_plots('examples/example-bar-and-line-urban-chart.gif',[animated_bar_chart,animated_line_chart],    title='Urban Population 1977 - 2018', adjust_subplot_top=0.85, enable_progress_bar=True)

12 意大利疫情

代码语言:txt
AI代码解释
复制
import geopandasimport pandas as pdimport pandas_aliveimport contextilyimport matplotlib.pyplot as pltregion_gdf = geopandas.read_file('data\geo-data\italy-with-regions')region_gdf.NOME_REG = region_gdf.NOME_REG.str.lower().str.title()region_gdf = region_gdf.replace('Trentino-Alto Adige/Sudtirol','Trentino-Alto Adige')region_gdf = region_gdf.replace("Valle D'Aosta/Vallée D'Aoste\r\nValle D'Aosta/Vallée D'Aoste","Valle d'Aosta")italy_df = pd.read_csv('data\Regional Data - Sheet1.csv',index_col=0,header=1,parse_dates=[0])italy_df = italy_df[italy_df['Region'] != 'NA']cases_df = italy_df.iloc[:,:3]cases_df['Date'] = cases_df.indexpivoted = cases_df.pivot(values='New positives',index='Date',columns='Region')pivoted.columns = pivoted.columns.astype(str)pivoted = pivoted.rename(columns={'nan':'Unknown Region'})cases_gdf = pivoted.Tcases_gdf['geometry'] = cases_gdf.index.map(region_gdf.set_index('NOME_REG')['geometry'].to_dict())cases_gdf = cases_gdf[cases_gdf['geometry'].notna()]cases_gdf = geopandas.GeoDataFrame(cases_gdf, crs=region_gdf.crs, geometry=cases_gdf.geometry)gdf = cases_gdfmap_chart = gdf.plot_animated(basemap_format={'source':contextily.providers.Stamen.Terrain},cmap='viridis')cases_df = pivotedfrom datetime import datetimebar_chart = cases_df.sum(axis=1).plot_animated(    kind='line',    label_events={        'Schools Close':datetime.strptime("4/03/2020", "%d/%m/%Y"),        'Phase I Lockdown':datetime.strptime("11/03/2020", "%d/%m/%Y"),        '1M Global Cases':datetime.strptime("02/04/2020", "%d/%m/%Y"),        '100k Global Deaths':datetime.strptime("10/04/2020", "%d/%m/%Y"),        'Manufacturing Reopens':datetime.strptime("26/04/2020", "%d/%m/%Y"),        'Phase II Lockdown':datetime.strptime("4/05/2020", "%d/%m/%Y"),    },    fill_under_line_color="blue",    add_legend=False)map_chart.ax.set_title('Cases by Location')line_chart = (    cases_df.sum(axis=1)    .cumsum()    .fillna(0)    .plot_animated(kind="line", period_label=False, title="Cumulative Total Cases",add_legend=False))def current_total(values):    total = values.sum()    s = f'Total : {int(total)}'    return {'x': .85, 'y': .1, 's': s, 'ha': 'right', 'size': 11}race_chart = cases_df.cumsum().plot_animated(    n_visible=5, title="Cases by Region", period_label=False,period_summary_func=current_total)import timetimestr = time.strftime("%d/%m/%Y")plots = [bar_chart, race_chart, map_chart, line_chart]# Otherwise titles overlap and adjust_subplot does nothingfrom matplotlib import rcParamsfrom matplotlib.animation import FuncAnimationrcParams.update({"figure.autolayout": False})# make sure figures are `Figure()` instancesfigs = plt.Figure()gs = figs.add_gridspec(2, 3, hspace=0.5)f3_ax1 = figs.add_subplot(gs[0, :])f3_ax1.set_title(bar_chart.title)bar_chart.ax = f3_ax1f3_ax2 = figs.add_subplot(gs[1, 0])f3_ax2.set_title(race_chart.title)race_chart.ax = f3_ax2f3_ax3 = figs.add_subplot(gs[1, 1])f3_ax3.set_title(map_chart.title)map_chart.ax = f3_ax3f3_ax4 = figs.add_subplot(gs[1, 2])f3_ax4.set_title(line_chart.title)line_chart.ax = f3_ax4axes = [f3_ax1, f3_ax2, f3_ax3, f3_ax4]timestr = cases_df.index.max().strftime("%d/%m/%Y")figs.suptitle(f"Italy COVID-19 Confirmed Cases up to {timestr}")pandas_alive.animate_multiple_plots(    'examples/italy-covid.gif',    plots,    figs,    enable_progress_bar=True)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
2 条评论
热度
最新
求数据或者数据格式!
求数据或者数据格式!
11点赞举报
https://github.com/JackMcKew/pandas_alive 这里就有,data 目录下就有相应的数据和代码。
https://github.com/JackMcKew/pandas_alive 这里就有,data 目录下就有相应的数据和代码。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
看完这篇文章,我彻底爱上了Python动态图表!
关于动态条形图,小F以前推荐过「Bar Chart Race」这个库。三行代码就能实现动态条形图的绘制。
小F
2020/12/16
8180
看完这篇文章,我彻底爱上了Python动态图表!
精选3种制作竞赛动图的方法,收藏
上面的两个动图,就是条形竞赛图和折线竞赛图,今天我们就来看看都有哪些方便的方法来制作呢
陈晨135
2022/01/07
8340
精选3种制作竞赛动图的方法,收藏
【硬核干货】4500字、10个案例分享几个Python可视化小技巧,助你绘制高质量图表
一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘制出更加高质量的图表。
用户6888863
2022/04/13
5780
【硬核干货】4500字、10个案例分享几个Python可视化小技巧,助你绘制高质量图表
COVID-19数据分析实战:统计分析及可视化
第一篇文章和第二篇文章我们对line list 数据集进行清洗,以及对文本内容进行词云分析。
统计学家
2020/05/25
1.7K0
COVID-19数据分析实战:统计分析及可视化
精选6种制作竞赛动图的方法,收藏!
上面的两个动图,就是条形竞赛图和折线竞赛图,今天我们就来看看都有哪些方便的方法来制作呢
周萝卜
2022/02/10
1.4K0
精选6种制作竞赛动图的方法,收藏!
Python在Finance上的应用3:处理股票数据基础
欢迎来到Python for Finance教程系列的第3节。在本教程中,我们将使用股票数据进一步进行基本的数据处理和可视化。将要使用的开始代码(在前面的教程中已经介绍过)是:
万能数据的小草
2020/02/19
7720
不让数据动起来,那PPT多没意思啊
数据暴增的年代,数据科学家、分析师在被要求对数据有更深的理解与分析的同时,还需要将结果有效地传递给他人。如何让目标听众更直观地理解?当然是将数据可视化啊,而且最好是动态可视化。
朱小五
2020/06/15
1.3K21
为了这个GIF,我专门建了一个网站
我已经用streamlit+bar_chart_race实现了,然后白嫖了heroku的服务器,大家通过下面的网址上传csv格式的表格就可以轻松制作条形竞赛图,生成的视频可以保存本地。
统计学家
2021/12/27
7720
为了这个GIF,我专门建了一个网站
刷爆全网的动态条形图,原来5行Python代码就能实现!
比如数可视的「花火hanabi」,嫡数的「镝数图表」,以及国外网站「Flourish」。
小F
2020/10/09
2.1K0
刷爆全网的动态条形图,原来5行Python代码就能实现!
深度好文 | Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
在数据分析和可视化中最有用的 50 个 Matplotlib 图表。 这些图表列表允许您使用 python 的 matplotlib 和 seaborn 库选择要显示的可视化对象。
数据派THU
2019/05/09
1.7K0
深度好文 | Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
时间序列基础教程总结!
最近在Kaggle发现了一个关于时间序列比较不错的kernal,决定翻译一下搬运过来,大家一起学习交流一下。如果预期不错的话准备写四章,分别是时间序列Python基本操作、统计分析、时间序列分解与随机游走、统计建模分析。
阿泽 Crz
2021/03/24
7860
如何用Jupyter Notebook制作新冠病毒疫情追踪器?
新冠肺炎已在全球范围内爆发。为了解全球疫情分布情况,有技术人员使用Jupyter Notebook绘制了两种疫情的等值线地图(choropleth chart)和散点图。
AI科技大本营
2020/03/18
8060
做动态图表,没有数据?用Python就能获取!
先看一下B站2019年「数据可视化」版块的情况,第一个视频超2百万的播放量,4万+的弹幕。
小F
2020/11/09
7000
做动态图表,没有数据?用Python就能获取!
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
一章内容介绍三块内容,感觉哪个都没说清。 In[1]: import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline 1. matplotlib入门 Matplotlib提供了两种方法来作图:状态接口和面向对象。 # 状态接口是通过pyplot模块来实现的,matplotlib会追踪绘图环境的当前状态 # 这种方法适合快速画一些简单
SeanCheney
2018/11/29
1.7K0
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
用Python优雅地制作动态条形图
公众号“算法美食屋”后台回复关键字:动态图,可添加作者微信获取完整代码和人口数据集。
lyhue1991
2021/06/15
5250
超酷炫,百行Python代码制作动态曲线图
主要思路是设计plot_frame绘图函数绘制逐桢图片,然后用matplotlib.animation构建动画,如果有需要,还可以导出成gif和mp4。
lyhue1991
2021/06/15
1K0
超长好文 |Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
在数据分析和可视化中最有用的 50 个 Matplotlib 图表。 这些图表列表允许您使用 python 的 matplotlib 和 seaborn 库选择要显示的可视化对象。
小小詹同学
2019/11/12
1.2K0
超长好文 |Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
干货 | 20个教程,掌握时间序列的特征分析(附代码)
【导语】时间序列是指以固定时间为间隔的序列值。本篇教程将教大家用 Python 对时间序列进行特征分析。
AI科技大本营
2019/07/11
6.1K0
干货 | 20个教程,掌握时间序列的特征分析(附代码)
使用Pandas_Alive做数据可视化,使图表动起来
Pandas_Alive不仅包含动态条形图,还可以绘制动态曲线图、气泡图、饼状图、地图等。本文记录环境安装,数据获取,到最后生成动态gif全过程。
IT不难
2022/04/23
1.4K0
使用Pandas_Alive做数据可视化,使图表动起来
用python做时间序列预测五:时间序列缺失值处理
有的时候,一些时刻或连续时间段内的值无法采集到,或者本身就没有值,本文将介绍如何处理这种情况。 一般而言,有以下几种方法: 对所有的缺失值用零填充。 前向填充:比如用周一的值填充缺失的周二的值 后向填
AI粉嫩特工队
2020/06/10
4.5K0
推荐阅读
相关推荐
看完这篇文章,我彻底爱上了Python动态图表!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档