python matpoltlib绘制动态图_使用Python、Geopandas和Matplotlib制作gif动态

原标题:使用Python、Geopandas和Matplotlib制作gif动态

不需要Photoshop:仅使用Python和命令行制作动画图表。

39810d89893148fc923bb139f9c73ddd.gif

作为一种编程语言,Python非常灵活。这使得有时可以在几行代码中进行大量不同的可视化成为可能。但是现在有了很多不同的图表网站和软件,为什么还要编写代码?我们不能只使用相关网站的GUI上传数据,调整范围,点击导出png图片结果吗?

是,当然可以。有时,如果您需要快速的制作一次性图表或地图,这是最佳选择。但是当你需要制作大量的地图时,使用Python的强大功能会产生更好的结果。

本文将介绍如何创建一个能随时间数据变化的动画gif地图。最重要的是,本教程将从头到尾仅使用Python和一些命令行工具,无需在Photoshop或其他软件中进行任何操作。

正如上面所说,本文的方法在具体工作中也许并不是最佳的方法,但如果考虑到制图的速度、可重复性和一致性,我认为这是一个很好的方法。

为什么选择GIF地图?

在过去几年中,gif图表似乎已经在社交媒体上大受欢迎。像“金融时报”和“经济学人”这样的出版商花费了更多的时间来精简和完善他们的数据产品,以便于在Twitter和Instagram等平台上更好地展示信息。也许更重要的是,gif图表允许在静态图表显示的基础上创建一个新的数据维度。

Gif动图在数据可视化中的应用场景:

通过注释或突出显示来引导用户浏览同一图表中最重要的点

通过比较显示两个不同的图表

显示相同的图表随时间的变化(这是我们要做的)

该清单并非详尽无遗,用例也在不断扩大,可以说动态图表既炫酷又实用(正确使用时)。

下面让我们来开始制作。

如何制作一个gif动态地图

这是您应该开始的:

加载shapefile(地图文件)

加载要显示的csv数据文件

融合这两个类型的数据

绘制地图并设计样式

现在,我们将使用Python中for()循环的强大功能,将多个不同时期的数据展示在相同的地图上。因为我们想要显示随时间的变化,我们需要确保我们的数据包含年份作为变量。为便于标记,我们确保数据的每个列标题都是年份数字(即不同年的数据分别放在不同列)。

为了遍历每列的数据,我们需要一个字符串列表来调用每列的名称。让我们创建一个列表变量,其中包含每列的年份(格式化为字符串)。我们还设置一个输出路径,以便将每年的数据地图保存到一个文件夹中。

5eaa8439f72c4d31bfe64a93d69429c2.png

最后,在创建地图之前,我们要为vmin和max值设置一致的全局变量。这将设置颜色范围的值。如果你事先没有设置它,Matplotlib将在每次for循环迭代时改变等值区的范围,因此很难看出值随时间的增加或减少的方式。

ceef0537c49244a7bafdc18698aaa072.png

写for循环

for()循环使用起来相当简单,for()循环中语法意思大概如下:

对于list_of_years列表中的每一年,运行以下代码。

当我们列表中的所有年份都通过代码时,停止循环。

07dae34c0dc94285bbb9155a55ef44e2.png

如果您运行此代码并打开刚刚设置的输出路径文件夹,您应该会看到许多地图,每个地图的颜色略有不同,代表不同年份的数据。您可能会想:一旦做成地图动画,我们将如何知道年份的变化?

我们可以在底部设置一个简单的日期范围(2007-2015),但for()循环可以为我们提供更好的解决方案。由于我们已经将每列的年份保存为变量中的字符串,因此我们可以为每个地图添加不同的注释(对应于数据的年份)。

根据我们的for()循环,变量'year'将是每次for循环运行的列的年份。使用这个逻辑,我们可以插入'year'作为fig.annotate()参数的变量。

现在,每次for循环运行时,不同的年份将作为注释插入到地图上。使用相同的逻辑,我们也可以将文件名设置为每年开始,这样就很容易找到每年对应的地图。在for()循环中添加此代码将添加年份注释。

e17fc158985d4a5f9b5398317d2b32fa.png

重新运行代码,您的地图会替换为新地图,每个地图的左下角都有年份注释。如果你从上到下翻阅地图,你就可以了解到你的gif会是什么样子。

制作GIF

我们在进行GIF制作之前,要将我们得到的所有png格式的地图图片,转化为jpg格式,图片格式转化有多种方法,下面举了一个在python中利用opencv(cv2)进行图片格式转化的例子,仅供参考。

254d61f0d93a440681898654e4f97259.png

接下来我们可以开始制作GIF动态地图了,有很多方法可以制作GIF动图,我们使用的是ImageMagick,原因有以下几点:

它相对容易安装和设置

它允许您在一行代码中设置转换时间,裁剪大小和文件格式

它超级快

ImageMagick的文档非常详尽。如果您尚未安装它,请查看其官方文档页面。

首先检查您是否正确安装了ImageMagick:

在命令行中输入并运行:

convert –version

如果已成功安装了ImageMagick,将显示包含版本和版权声明的消息。在系统上安装ImageMagick后,转到包含我们刚制作的所有地图的目录。现在我们需要运行一行代码来创建我们的gif。这行代码的作用如下:

convert:获取所有这些文件并进行更改

-delay 60:设置每个图像在进入下一个图像之间经过的时间

-loop 0:设置无限循环

插入将要转换的所有文件名

my_map.gif

这是在终端中使用的代码:

e1dbd9c0b3464843bc3fa30ea30ff8ed.png

现在看看自动创建的新文件“new_map_normal.gif”,你看到的图像应该如下:

39810d89893148fc923bb139f9c73ddd.gif

使用gif地图可以成为深入分析数据的一个很好的切入点。 此外,您可以将任何具有时间序列数据的图表转换为gif动图 - 我们这里只是选择了地图,因为它看起来更炫酷。

如果您有任何疑问,欢迎与我交流,后面会在评论区给出源码链接。返回搜狐,查看更多

责任编辑:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值