前の記事で、編集者は Python で gif ## を使用する方法を共有しました
# モジュールを作成する gif
チャートのフォーマット、 は素晴らしいです、Python を使用して動的視覚化チャートを描画し、GIF 形式で保存します。今日はそれを紹介します。## の新しい作成方法# gif
matplotlib の関連モジュールを呼び出す手順と方法も非常にシンプルで理解しやすいです。
データベースのダウンロードとインポート
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
##最初にいくつかの静的チャートを描画します
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
このようにして、いくつかの静的グラフを生成し、それらを
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')
output
別の考え方もあります
#これを見ると、上記の方法は少し面倒だと感じる人もいるかもしれませんが、結局のところ、最初に数十の静的チャートを生成する必要があります。コンピューターのディスク容量が少し厳しい場合、またはそのような保存場所がない場合これらの数十のチャート。したがって、それをワンステップで実行できるかどうか疑問に思うでしょう。もちろんそれは可能であり、例えば、1950年から2020年までの各年齢における人口割合の分布を描く場合、最初のステップは、開始年である1950年の各年齢における人口割合の分布を描くことである。チャート、コードは次のとおりです
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
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
格式的图表,避免生成数十张繁多地静态图片了。
<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 アニメーションを描画しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。