使用matplotlib創(chuàng)建Gif動圖的實現(xiàn)
1、Matplotlib 簡介
數(shù)據(jù)可視化有助于更有效地講述有關(guān)數(shù)據(jù)的故事并使其易于呈現(xiàn)。有時很難用靜態(tài)圖表來解釋數(shù)據(jù)的變化,為此,我們將討論matplotlib提供的名為“Animation”的動畫庫之一。以下是要涵蓋的主題。
最流行的Python二維繪圖庫是Matplolib。大多數(shù)人從Matplotlib開始他們的探索性數(shù)據(jù)分析之旅。它可以輕松創(chuàng)建繪圖、直方圖、條形圖、散點圖等。與Pandas和Seaborn一樣,它可以創(chuàng)建更復(fù)雜的視覺效果。
但是也有一些缺陷:
Matplotlib的命令式 API,通常過于冗長。
有時糟糕的風(fēng)格默認(rèn)值。
對網(wǎng)絡(luò)和交互式圖表的支持不佳。
對于大型和復(fù)雜的數(shù)據(jù)通常很慢。
2、繪制動畫正弦和余弦波
參考代碼如下
import matplotlib.animation as anime import matplotlib.pyplot as plt import numpy as np import pandas as pd fig = plt.figure() l, = plt.plot([], [], 'k-') l2, = plt.plot([], [], 'm--') p1, = plt.plot([], [], 'ko') p2, = plt.plot([], [], 'mo') plt.xlabel('xlabel') plt.ylabel('ylabel') plt.title('title') plt.xlim(-5, 5) plt.ylim(-5, 5) def func(x): return np.sin(x) * 3 def func2(x): return np.cos(x) * 3 metadata = dict(title="Movie", artist="sourabh") writer = anime.PillowWriter(fps=15, metadata=metadata) xlist = [] ylist = [] ylist2 = [] xlist2 = [] with writer.saving(fig, "sin+cosinewave.gif", 100): for xval in np.linspace(-5, 5, 100): xlist.append(xval) ylist.append(func(xval)) l.set_data(xlist, ylist) l2.set_data(xlist2, ylist2) p1.set_data(xval, func(xval)) writer.grab_frame() for xval in np.linspace(-5, 5, 100): xlist2.append(xval) ylist2.append(func2(xval)) l.set_data(xlist, ylist) l2.set_data(xlist2, ylist2) p2.set_data(xval, func2(xval)) writer.grab_frame()
動畫效果圖如下。
3、繪制曲面圖
參考代碼如下,這段代碼會運行一段時間。
import matplotlib from matplotlib import cm import matplotlib.animation as anime import matplotlib.pyplot as plt import numpy as np import pandas as pd np.random.seed(29680801) fig, ax = plt.subplots(subplot_kw=dict(projection='3d')) plt.xlim(-5, 5) plt.ylim(-5, 5) metadata = dict(title="Movie", artist="sourabh") writer = anime.PillowWriter(fps=15, metadata=metadata) def func(x, y, r, t): return np.cos(r / 2 + t) * np.exp(-np.square(r) / 50) xdata = np.linspace(-10, 10, 1000) ydata = np.linspace(-10, 10, 1000) x_list, y_list = np.meshgrid(xdata, ydata) r_list = np.sqrt(np.square(x_list) + np.square(y_list)) with writer.saving(fig, "exp3d.gif", 100): for t in np.linspace(0, 20, 160): z = func(x_list, y_list, r_list, t) ax.set_zlim(-1, 1) ax.plot_surface(x_list, y_list, z, cmap=cm.viridis) writer.grab_frame() plt.cla()
動畫效果如下
4、繪制回歸圖
參考代碼如下
import matplotlib from matplotlib import cm import matplotlib.animation as anime import matplotlib.pyplot as plt import numpy as np import pandas as pd np.random.seed(23680545) metadata = dict(title="Movie", artist="sourabh") writer = anime.PillowWriter(fps=15, metadata=metadata) fig = plt.figure() plt.xlim(-8, 8) plt.ylim(-8, 8) def func(x): return x * 1.2 + 0.1 + np.random.normal(0, 2, x.shape) x = np.random.uniform(-7, 7, 10) x = np.sort(x) y = func(x) coeff = np.polyfit(x, y, 1) print(coeff) xline = np.linspace(-6, 6, 40) yline = np.polyval(coeff, xline) lPnt, = plt.plot(x, y, 'o') l, = plt.plot(xline, yline, 'k-', linewidth=3) plt.show() fig = plt.figure() plt.xlim(-10, 10) plt.ylim(-10, 10) lPnt, = plt.plot([], [], 'o') l, = plt.plot([], [], 'k-', linewidth=3) x_List = [] y_List = [] x_pnt = [] y_pnt = [] with writer.saving(fig, "fitPlot.gif", 100): for xval, yval in zip(x, y): x_pnt.append(xval) y_pnt.append(yval) lPnt.set_data(x_pnt, y_pnt) l.set_data(x_List, y_List) writer.grab_frame() writer.grab_frame() for x_val, y_val in zip(xline, xline): x_List.append(x_val) y_List.append(y_val) lPnt.set_data(x_pnt, y_pnt) l.set_data(x_List, y_List) writer.grab_frame() for i in range(10): writer.grab_frame()
效果圖如下
到此這篇關(guān)于使用matplotlib創(chuàng)建Gif動圖的實現(xiàn)的文章就介紹到這了,更多相關(guān)matplotlib創(chuàng)建Gif動圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于ZeroMQ 三種模式python3實現(xiàn)方式
今天小編就為大家分享一篇關(guān)于ZeroMQ 三種模式python3實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12python3.6使用pymysql連接Mysql數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了python3.6使用pymysql連接Mysql數(shù)據(jù)庫,以及簡單的增刪改查操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05對python插入數(shù)據(jù)庫和生成插入sql的示例講解
今天小編就為大家分享一篇對python插入數(shù)據(jù)庫和生成插入sql的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11利用Python將時間或時間間隔轉(zhuǎn)為ISO 8601格式方法示例
國際標(biāo)準(zhǔn)化組織的國際標(biāo)準(zhǔn)ISO8601是日期和時間的表示方法,全稱為《數(shù)據(jù)存儲和交換形式·信息交換·日期和時間的表示方法》,下面這篇文章主要給大家介紹了關(guān)于利用Python將時間或時間間隔轉(zhuǎn)為ISO 8601格式的相關(guān)資料,需要的朋友可以參考下。2017-09-09Pycharm遠(yuǎn)程調(diào)試openstack的方法
這篇文章主要為大家詳細(xì)介紹了Pycharm遠(yuǎn)程調(diào)試openstack的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11