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

德昂
• 阅读 1197

大家好

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

图库简介

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

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

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

制图简介

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

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})

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

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

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

01 动态条形图

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')

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

02 动态柱状图

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')

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

03 动态曲线图

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})

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

04 动态面积图

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)

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

05 动态散点图

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')

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

06 动态饼图

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})

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

07 动态气泡图

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)

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

08 动态地理图表

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})

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

09 行政区域动图

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})

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

10 多动图组合

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)

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

11 城市人口变化

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)

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

12 意大利疫情

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)

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

点赞
收藏
评论区
推荐文章
Irene181 Irene181
4年前
数据可视化干货:使用pandas和seaborn制作炫酷图表
吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎?导读:我们介绍过用matplotlib制作图表的一些tips,感兴趣的同学可以戳→。matplotlib是一个相当底层的工具。你可以从其基本组件中组装一个图表:数据显示(即绘图的类型:线、条、框、散点图、轮廓等)、图例、标题、刻度标记和其他注释。在pandas中,我们可能有多个数据列,并且带有行
Irene181 Irene181
4年前
刷爆全网的动态条形图,原来5行Python代码就能实现!
说起动态图表,最火的莫过于动态条形图了。在B站上搜索「数据可视化」这个关键词,可以看到很多与动态条形图相关的视频。好多视频都达到了上百万的播放量,属实厉害。目前网上实现动态条形图现成的工具也很多。比如数可视的「花火hanabi」,嫡数的「镝数图表」,以及国外网站「Flourish」。但是作为一名Pythoner,当然是想要研究一下如何
CuterCorley CuterCorley
4年前
Python数据分析实战(3)Python实现数据可视化
一、数据可视化介绍数据可视化是指将数据放在可视环境中、进一步理解数据的技术,可以通过它更加详细地了解隐藏在数据表面之下的模式、趋势和相关性。Python提供了很多数据可视化的库:matplotlib是Python基础的画图库,官网为,在案例地址中介绍了很多种类的图和代码示例。pandas是在matplotlib的基础上实现
Aidan075 Aidan075
4年前
这款免费插件,让Excel轻松制作酷炫图表​
大家好,我是小五🐶最近我看一篇介绍如何用Excel来制作径向树图\1\的文章,在其中学到了一个很有趣的Excel加载项。大家可能都知道D3.js吧,它是目前最流行的可视化库之一。而我要给大家介绍这款实用且免费的Excel加载项——E2D3呢,就能在Excel中轻松实现各种D3的优质图表!比如下面这些👇3D动态地图通过经纬度等数据,我们可以将
Aidan075 Aidan075
4年前
推荐四款可视化工具,解决99%的可视化大屏需求
大家好,我是小五我最经常的工作是将一些项目的数据从数据库导出,然后分门别类的列到excel表格中,领导看起来眼花缭乱。那就开始想了,要是能以图表可视化展现出来,领导就可以看到项目近几个月的走势,也知道之后要怎么决策了。尝试过使用excel制作图表,说实话完全可以实现,,于是在网上找到了以下四种可视化工具,现在我们来看一下:它们的简介和优缺点,如果大家有自己的
Aidan075 Aidan075
4年前
数据可视化图表使用场景大全 !
转自:大数据分析和人工智能大家好,我是小五🐶可视化图表种类如此之多,什么场景下应该用什么图表展示,是一个让人头秃的难题。数据可视化的爱好者SeverinoRibecca,他在自己的网站上收录了60种可视化图表样式以及它们分别适用于什么样的场景,并且推荐了相应的制作工具。值得一看。点阵图‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍
Aidan075 Aidan075
4年前
一个没法商用,但是好玩有趣的 Python 手绘图形库!
https://github.com/chenjiandongx/cutecharts今天,给大家介绍一个很酷的 Python手绘风格可视化神包:cutecharts。和Matplotlib、pyecharts等常见的图表不同,使用这个包可以生成下面这种看起来像手绘的各种图表,在一些场景下使用效果可能会更好。GitHub地址:https://git
Aidan075 Aidan075
4年前
ECharts团队出品的可视化神器,值得一试
大家好,我是小五🚀如果你对可视化感兴趣的话,一定了解过ECharts或者pyecharts。不过使用它们还是需要有一定编程基础,今天给大家安利一个:同为ECharts团队出品,但是0编程的可视化神器。简介百度图说是一款在线可视化工具软件,可以实现零编程玩转图表。它的图表样式一共8类22种,对比之前介绍的还是少了一些。官网地址:https://tushuo.b
Stella981 Stella981
3年前
DataGear 轻松制作支持图表联动的全国地图、省级地图数据可视化看板
DataGear(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.datagear.tech)看板的图表联动功能,使您可以轻松制作支持图表联动的全国地图、省级地图数据可视化看板。首先,新建两个数据集。第一个是各省指标数据集,将用于绘制全国指标图表,它的SQL语句如下
Python进阶者 Python进阶者
3年前
Pyecharts绘图API总结
一、初识Pyecharts大家好,我是Python进阶者。pyecharts简介pyecharts是一个用于生成Echarts图表的类库,Echarts是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而Python是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts
铁扇公主 铁扇公主
1年前
Mac电脑好用的绘图软件 OmniGraffle Pro for mac
OmniGrafflePro是一款专业的图形设计和绘图软件,该软件旨在帮助用户创建精美的图表、流程图、组织结构图、原型设计和其他可视化图形。OmniGrafflePro提供了丰富的工具和功能,使用户能够轻松制作复杂的图形和图表。以下是OmniGraffle