利用Python的matplotlib库绘制动态图形
利用Python的matplotlib庫繪制動(dòng)態(tài)圖形
一、python 繪制動(dòng)畫圖
python繪制動(dòng)態(tài)圖形是數(shù)據(jù)可視化更直觀、更好看的一種方式 ,matplotlib工具包是常用的繪圖工具 ,也可以用來繪制動(dòng)態(tài)圖形。本文介紹四種繪制動(dòng)態(tài)圖形的方法 ,包括生成圖形的代碼和動(dòng)態(tài)圖形演示示例。
用matplotlib工具包創(chuàng)建動(dòng)畫圖有兩種方法:
- 使用 pause() 函數(shù)
- 使用 FuncAnimation() 函數(shù)
動(dòng)畫柱狀圖 ,使用FuncAnimation() 函數(shù)
代碼如下:
from matplotlib import pyplot as pltfrom matplotlib.animation import FuncAnimation, writersimport numpy as np fig = plt.figure(figsize = (7,5))axes = fig.add_subplot(1,1,1)axes.set_ylim(0, 300)palette = ['blue', 'red', 'green', 'darkorange', 'maroon', 'black'] y1, y2, y3, y4, y5, y6 = [], [], [], [], [], [] def animation_function(i): y1 = i y2 = 5 * i y3 = 3 * i y4 = 2 * i y5 = 6 * i y6 = 3 * i plt.xlabel("Country") plt.ylabel("GDP of Country") plt.bar(["India", "China", "Germany", "USA", "Canada", "UK"], [y1, y2, y3, y4, y5, y6], color = palette) plt.title("Bar Chart Animation") animation = FuncAnimation(fig, animation_function, interval = 50)plt.show()如下圖:

橫向柱狀跑圖 (Horizontal Bar Chart Race),使用FuncAnimation() 函數(shù)
以下代碼是繪制世界1500年-2018年主要城市人口變化橫向柱狀跑圖,需要數(shù)據(jù)集文件city_populations.csv評(píng)論區(qū)留言。
程序代碼如下:
import pandas as pdimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerfrom matplotlib.animation import FuncAnimationdf = pd.read_csv('city_populations.csv',usecols=['name', 'group', 'year', 'value'])colors = dict(zip(['India','Europe','Asia','Latin America','Middle East','North America','Africa'],['#adb0ff', '#ffb3ff', '#90d595','#e48381', '#aafbff', '#f7bb5f','#eafb50']))group_lk = df.set_index('name')['group'].to_dict()def draw_barchart(year):dff = df[df['year'].eq(year)].sort_values(by='value',ascending=True).tail(10)ax.clear()ax.barh(dff['name'], dff['value'],color=[colors[group_lk[x]] for x in dff['name']])dx = dff['value'].max() / 200for i, (value, name) in enumerate(zip(dff['value'],dff['name'])):ax.text(value-dx, i, name,size=14, weight=600,ha='right', va='bottom')ax.text(value-dx, i-.25, group_lk[name],size=10, color='#444444',ha='right', va='baseline')ax.text(value+dx, i, f'{ value:,.0f}',size=14, ha='left', va='center')# polished stylesax.text(1, 0.4, year, transform=ax.transAxes,color='#777777', size=46, ha='right',weight=800)ax.text(0, 1.06, 'Population (thousands)',transform=ax.transAxes, size=12,color='#777777')ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{ x:,.0f}'))ax.xaxis.set_ticks_position('top')ax.tick_params(axis='x', colors='#777777', labelsize=12)ax.set_yticks([])ax.margins(0, 0.01)ax.grid(which='major', axis='x', linestyle='-')ax.set_axisbelow(True)ax.text(0, 1.12, 'The most populous cities in the world from 1500 to 2018',transform=ax.transAxes, size=24, weight=600, ha='left')ax.text(1, 0, ' ',transform=ax.transAxes, ha='right', color='#777777',bbox=dict(facecolor='white', alpha=0.8, edgecolor='white'))plt.box(False)plt.show()fig, ax = plt.subplots(figsize=(15, 8))animator = FuncAnimation(fig, draw_barchart,frames = range(1990, 2019))plt.show()