用Python绘制超酷的gif动图,惊艳了所有人转载

原创
小哥 3年前 (2022-10-17) 阅读数 52 #大杂烩

在前一篇文章中,我分享了如何使用在上一篇文章中,我在前一篇文章中分享了如何使用,我分享了如何使用 Python 当中的 gif 模块制造模块生产模块制造模块创造 gif 该图表以图表的格式表示,以图表的格式表示。

太棒了,与伟大的Python绘制动态可视化图表并将其另存为绘制动态可视化图表并将其另存为gif格式

今天,我将向您介绍另一种产品 gif 设置图表格式的新方法,称为 matplotlib 这些步骤和方法非常简单,也很容易理解。

下载和导入数据库下载和导入数据库下载和导入数据库

我们这次使用的数据集是我们这次使用的数据集是我们这次使用的数据集是 bokeh 该模块附带一个数据集,可以使用以下代码行直接下载

import bokeh
bokeh.sampledata.download()

然后导入要稍后使用的数据集,我们将为指定的国家/地区选择一个1950年初至今不同年龄组人口所占比例的数据

from bokeh.sampledata.population import data
import numpy as np

data = filter_loc(United States of America)
data.head()

output

从绘制几个静态图表开始,从绘制多个静态图表开始,从几个静态图表开始

我们可以从绘制几个静态图表开始,从绘制多个静态图表开始,从几个静态图表开始,然后将这几张图表合成一张 gif 以下代码格式的运动图像的代码如下

import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.patheffects as fx

# 函数用于绘制图表函数用于绘制图形
def make_plot(year):
    
    # 按年过滤数据按年过滤数据按年过滤数据
    df = data[data.Year == year]
        
    # 制作图表
    fig, (ax1, ax2) = plt.subplots(1, 2, sharey = True)
    ax1.invert_xaxis()
    fig.subplots_adjust(wspace = 0) 
    
    ax1.barh(df[df.Sex == Male].AgeGrp, df[df.Sex == Male].percent, label = Male)
    ax2.barh(df[df.Sex == Female].AgeGrp, df[df.Sex == Female].percent, label = Female, color = C1)
    
    country = df.Location.iloc[0]
    if country == United States of America: country == US
        
    fig.suptitle(f......)
    fig.supxlabel(......)
    fig.legend(bbox_to_anchor = (0.9, 0.88), loc = upper right)
    ax1.set_ylabel(Age Groups)
    
    return fig

我们自定义了一个函数用于绘制图表函数用于绘制图形,其中的参数是年份,逻辑很简单,我们是想按年过滤数据按年过滤数据按年过滤数据,然后根据筛选出的数据来绘制图表,每一年的图表不尽相同

years = [i for i in set(data.Year) if i < 2022]
years.sort()

for year in years:
    fig = make_plot(year)
    fig.savefig(f{year}.jpeg,bbox_inches = tight)

output

通过这种方式,我们生成许多静态图表,然后将这些图表组装成 gif 格式为以下代码的几个图表

import matplotlib.animation as animation
fig, ax = plt.subplots()
ims = []

for year in years:
    im = ax.imshow(plt.imread(f{year}.jpeg), animated = True)
    ims.append([im])

ani = animation.ArtistAnimation(fig, ims, interval=600)
ani.save(us_population.gif)

output

有另一种思考方式,有另一种思考方式,有另一种思考方式

毕竟,我们需要创建几十张静态图表,如果计算机的磁盘空间有点紧张,或者没有这样的地方来存储这几十张图表。因此,这是否能一步到位,将受到质疑。

当然,这是可能的,例如,如果我们打算绘制1950年到2020绘制不同年龄段人口比例图的第一步是,我们首先要画出1950在该年,即开始年,不同年龄段的人口比例在该年的分布情况用以下代码绘制

fig, (ax1, ax2) = plt.subplots(1, 2, sharey = True)
   
df = data[data.Year == 1955]

y_pos = [i for i in range(len(df[df.Sex == Male]))]
male = ax1.barh(y_pos, df[df.Sex == Male].percent, label = Male,
               tick_label = df[df.Sex == Male].AgeGrp)
female = ax2.barh(y_pos, df[df.Sex == Female].percent, label = Female, 
                  color = C1, tick_label = df[df.Sex == Male].AgeGrp)

ax1.invert_xaxis()
fig.suptitle(.......)
fig.supxlabel(....... (%))
fig.legend(bbox_to_anchor = (0.9, 0.88), loc = upper right)
ax1.set_ylabel(Age Groups)

output

然后我们自定义一个函数用于绘制图表函数用于绘制图形,其中参数为年份,目的在于通过年份来筛选出相对应的数据并且绘制出相对应的图表

def run(year):
    # 按年过滤数据按年过滤数据按年过滤数据
    df = data[data.Year == year]
    # 不同性别抽签为不同性别抽签不同性别抽签
    total_pop = df.Value.sum()
    df[percent] = df.Value / total_pop * 100
    male.remove()
    y_pos = [i for i in range(len(df[df.Sex == Male]))]
    male.patches = ax1.barh(y_pos, df[df.Sex == Male].percent, label = Male, 
                     color = C0, tick_label = df[df.Sex == Male].AgeGrp)
    female.remove()
    female.patches = ax2.barh(y_pos, df[df.Sex == Female].percent, label = Female,
                 
                 color = C1, tick_label = df[df.Sex == Female].AgeGrp)

    text.set_text(year)
    return male#, female

然后我们打给我们然后再打给 animation.FuncAnimation() 方法,

ani = animation.FuncAnimation(fig, run, years, blit = True, repeat = True, 
                              interval = 600)
ani.save(文件名.gif)

output

这允许您在一步中生成这将在一步中生成这允许您在一步中生成这在一步中生成 gif 该图表以图表的格式表示,以图表的格式表示。避免生成数十张繁多地静态图片了。

将若干张 gif 放置在大图像中的运动图像放置在大图像中的运动图像

最后我们可以放几张纸最后我们可以放几张纸 gif 动画被放置在一个包含以下代码的大图表中

import matplotlib.animation as animation

# 创建新画布创建新画布
fig, (ax, ax2, ax3) = plt.subplots(1, 3, figsize = (10, 3))

ims = []
for year in years:
    im = ax.imshow(plt.imread(f文件1{year}.jpeg), animated = True)
    im2 = ax2.imshow(plt.imread(f文件2{year}.jpeg), animated = True)
    im3 = ax3.imshow(plt.imread(f文件3{year}.jpeg), animated = True)
    ims.append([im, im2, im3])

ani = animation.ArtistAnimation(fig, ims, interval=600)
ani.save(comparison.gif)

output

推荐阅读:
入门: 最完整的零基学习最全面的零基学习最完整的零基学习Python的问题  | 从零开始学习从零基础学习从零基础学习8个月的Python  | 实战项目 |学Python这是捷径,这是捷径,这是捷径
干货:爬行豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析最佳球员分析 |   从万众期待到口碑惨败!唐探3令人失望  | 笑新伊田图龙记笑新伊田图龙记笑新伊田图龙记 | 谜语之王回答灯谜之王灯谜之王谜语之王 |用Python人山人海素描图人山人海素描图人山人海 Dishonor太火了,我用机器学习做了一个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python日常酷跑游戏日常酷跑游戏日常酷跑游戏!
AI: 会写诗的机器人会写诗的机器人会写诗的机器人 | 给图片上色给图片上色给图片上色 | 预测收入 | 《耻辱》太火了,我用机器学习做了一部迷你推荐系统电影
小工具: Pdf转Word易于修复表单和水印!易于处理的表单和水印!易于修复表单和水印!简单的表格和水印! | 一键把html将页面另存为网页另存为网页另存为pdf!|  再见PDF提款费!提款费!提款费!提款费用! | 用90构建最强大的代码行构建最强大的代码行构建最强大的代码行PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一个固定的低成本机票提醒!制作一张别针的低价机票提醒! |60代码行做了一个语音墙纸切换,天天见女士!

年度弹出文案年度弹出文案年度爆炸性文案

  • 1). 卧槽!Pdf转Word用Python轻松搞定 !

  • 2).学Python闻起来好香!我用100一行代码做了一个网站,帮助人们做了一行代码,做了一个网站,帮助了人们做了一行代码,帮助了人们PS旅行图片赚鸡腿吃旅行图片赚鸡腿

  • 3).第一次播放量过亿,火爆全网,我分析了《波妹》,发现了这些秘密

  • 4). 80一行行代码!使用Python让救济金做正确的事做做的人做好事的人A梦分身

  • 5).你必须掌握的东西你必须掌握20个python代码,简短而紧凑,永无止境的有用代码,简短而甜蜜,永无止境的有用的代码,简短而紧凑,永无止境的使用代码,简短而甜蜜,永无止境的用途

  • 6). 30个Python古怪技能集古怪小贴士收藏古怪技能集

  • 7). 我总结的80《菜鸟学习专页》《菜鸟学习专页》《菜鸟学习》Python精选干货.pdf》,都是干货

  • 8). 再见Python!我要学Go了!2500词深度分析词深度分析词深度分析 !

  • 9).发现一只舔狗的福利!这Python爬虫神器太酷了,不能自动下载女孩的照片

点击阅读原文点击查看点击点击阅读点击阅读原文点击查看B放我鸽子看录像!站在我的录像带上!在视频里放我鸽子!站在我的录像带上!

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门