Rumah > pembangunan bahagian belakang > Tutorial Python > 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
Lepaskan: 2023-05-04 16:19:07
ke hadapan
1325 orang telah melayarinya

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


Salin selepas log masuk
​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()


Salin selepas log masuk

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


Salin selepas log masuk
​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')


Salin selepas log masuk

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


Salin selepas log masuk
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


Salin selepas log masuk

然后我们调用​​animation.FuncAnimation()​​方法,

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


Salin selepas log masuk

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


Salin selepas log masuk

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!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan