Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Gunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orang

Gunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orang

WBOY
WBOYke hadapan
2023-05-04 16:19:071305semak imbas

Gunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orang

Dalam artikel sebelum ini, editor telah berkongsi cara menggunakan ​​Python​​​ modul dalam ​​gif​​​​ untuk mencipta ​​gif​​ Carta format,

adalah hebat, gunakan Python untuk melukis carta visualisasi dinamik, dan simpannya dalam format gif Hari ini, saya akan memperkenalkan kepada anda kaedah baharu untuk membuat carta dalam format ​gif​​ >​Modul berkaitan, langkah dan kaedahnya juga agak mudah dan mudah difahami. ​matplotlib​

Muat turun dan import pangkalan data

Set data yang kami gunakan kali ini ialah set data yang disertakan dengan modul melalui baris kod berikut, kami boleh terus Anda boleh memuat turun

import bokeh
bokeh.sampledata.download()


​bokeh​ dan kemudian mengimport set data untuk digunakan kemudian. >output

Lukis beberapa carta statik dahuluGunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orang

Kita boleh lukis beberapa carta statik dahulu, dan kemudian gabungkan carta ini menjadi satu​ ​ Format animasi sudah memadai, kodnya seperti berikut
from bokeh.sampledata.population import data
import numpy as np

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


Kami telah menyesuaikan fungsi untuk melukis carta, parameternya adalah tahun, logiknya sangat mudah, kami ingin menapis berdasarkan data pada tahun , dan kemudian lukis carta berdasarkan data yang ditapis Carta setiap tahun adalah berbeza

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​output

Dengan cara ini, kami menghasilkan beberapa gambar statik Carta kemudiannya dihimpunkan menjadi beberapa carta dalam format

​ Kod adalah seperti berikut: Gunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orang

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​

<.>

Jika ruang cakera komputer agak sempit, , atau tiada tempat untuk menyimpan berpuluh-puluh carta ini. Jadi anda akan tertanya-tanya sama ada ia boleh dilakukan dalam satu langkah. Sudah tentu boleh. Contohnya, jika kita merancang untuk melukis taburan perkadaran penduduk pada umur yang berbeza dari tahun 1950 hingga 2020, langkah pertama ialah melukis taburan perkadaran penduduk pada umur yang berbeza pada tahun 1950, iaitu tahun permulaan. Rajah, kodnya adalah seperti berikut Gunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orang

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


Gunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orangoutput

Kemudian kami menyesuaikan fungsi untuk melukis carta, di mana parameter adalah tahun dan tujuan adalah untuk menapis fasa mengikut tahun Data sepadan dan melukis carta yang sepadan

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

Gunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orang

这样就可以一步到位生成​​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

Gunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orang


Atas ialah kandungan terperinci Gunakan Python untuk melukis animasi gif yang menarik yang mengagumkan semua orang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam