ホームページ  >  記事  >  バックエンド開発  >  Python を使用して、誰もが驚くクールな GIF アニメーションを描画します

Python を使用して、誰もが驚くクールな GIF アニメーションを描画します

WBOY
WBOY転載
2023-05-04 16:19:071305ブラウズ

Python を使用して、誰もが驚くクールな GIF アニメーションを描画します

前の記事で、編集者は 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

##最初にいくつかの静的チャートを描画しますPython を使用して、誰もが驚くクールな GIF アニメーションを描画します

最初にいくつかの静的チャートを描画してから、これら の形式で複数のグラフを 1 つのアニメーションに結合するだけです。非常に簡単です。年に基づいてデータをフィルタリングし、フィルタリングされたデータに基づいてグラフを描画します。グラフは年ごとに異なります
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


output

このようにして、いくつかの静的グラフを生成し、それらを

gif

で複数のグラフにまとめました。コードは次のとおりです

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


outputPython を使用して、誰もが驚くクールな GIF アニメーションを描画します

別の考え方もあります

#これを見ると、上記の方法は少し面倒だと感じる人もいるかもしれませんが、結局のところ、最初に数十の静的チャートを生成する必要があります。コンピューターのディスク容量が少し厳しい場合、またはそのような保存場所がない場合これらの数十のチャート。したがって、それをワンステップで実行できるかどうか疑問に思うでしょう。もちろんそれは可能であり、例えば、1950年から2020年までの各年齢における人口割合の分布を描く場合、最初のステップは、開始年である1950年の各年齢における人口割合の分布を描くことである。チャート、コードは次のとおりです Python を使用して、誰もが驚くクールな 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')


Python を使用して、誰もが驚くクールな GIF アニメーションを描画します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

Python を使用して、誰もが驚くクールな GIF アニメーションを描画します

这样就可以一步到位生成​​gif​​格式的图表,避免生成数十张繁多地静态图片了。

将若干张​<span style="color: #2b2b2b;">gif</span>​动图放置在一张大图当中

最后我们可以将若干张​​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 を使用して、誰もが驚くクールな GIF アニメーションを描画します


以上がPython を使用して、誰もが驚くクールな GIF アニメーションを描画しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。