如何利用?Python?繪制動(dòng)態(tài)可視化圖表
一、安裝相關(guān)的模塊
首先第一步的話我們需要安裝相關(guān)的模塊,通過pip命令來安裝
pip install gif
另外由于gif模塊之后會(huì)被當(dāng)做是裝飾器放在繪制可視化圖表的函數(shù)上,主要我們依賴的還是Python當(dāng)中繪制可視化圖表的matplotlib、plotly、以及altair這些模塊,因此我們還需要下面這幾個(gè)庫
pip install "gif[altair]" ? ? pip install "gif[matplotlib]" pip install "gif[plotly]"
二、gif和matplotlib的結(jié)合
我們先來看gif和matplotlib模塊的結(jié)合,我們先來看一個(gè)簡單的例子,
代碼如下:
import random from matplotlib import pyplot as plt import gif x = [random.randint(0, 100) for _ in range(100)] y = [random.randint(0, 100) for _ in range(100)] gif.options.matplotlib["dpi"] = 300 @gif.frame def plot(i): ? ? xi = x[i*10:(i+1)*10] ? ? yi = y[i*10:(i+1)*10] ? ? plt.scatter(xi, yi) ? ? plt.xlim((0, 100)) ? ? plt.ylim((0, 100)) frames = [] for i in range(10): ? ? frame = plot(i) ? ? frames.append(frame) gif.save(frames, 'example.gif', duration=3.5, unit="s", between="startend")
output:

代碼的邏輯并不難理解,首先我們需要定義一個(gè)函數(shù)來繪制圖表并且?guī)?code>gif裝飾器,接著我們需要一個(gè)空的列表,通過for循環(huán)將繪制出來的對象放到這個(gè)空列表當(dāng)中然后保存成gif格式的文件即可。
三、gif和plotly的結(jié)合
除了和matplotlib的聯(lián)用之外,gif和plotly之間也可以結(jié)合起來用
代碼如下:
import random
import plotly.graph_objects as go
import pandas as pd
import gif
df = pd.DataFrame({
? ? 't': list(range(10)) * 10,
? ? 'x': [random.randint(0, 100) for _ in range(100)],
? ? 'y': [random.randint(0, 100) for _ in range(100)]
})
@gif.frame
def plot(i):
? ? d = df[df['t'] == i]
? ? fig = go.Figure()
? ? fig.add_trace(go.Scatter(
? ? ? ? x=d["x"],
? ? ? ? y=d["y"],
? ? ? ? mode="markers"
? ? ))
? ? fig.update_layout(width=500, height=300)
? ? return fig
frames = []
for i in range(10):
? ? frame = plot(i)
? ? frames.append(frame)
gif.save(frames, 'example_plotly.gif', duration=100)output:

整體的代碼邏輯和上面的相似,這里也就不做具體的說明了
四、matplotlib多子圖動(dòng)態(tài)可視化
上面繪制出來的圖表都是在單張圖表當(dāng)中進(jìn)行的,那當(dāng)然了我們還可以在多張子圖中進(jìn)行動(dòng)態(tài)可視化的展示,
代碼如下:
# 讀取數(shù)據(jù)
df = pd.read_csv('weather_hourly_darksky.csv')
df = df.rename(columns={"time": "date"})
@gif.frame
def plot(df, date):
? ? df = df.loc[df.index[0]:pd.Timestamp(date)]
? ? fig, (ax1, ax2, ax3) = plt.subplots(3, figsize=(10, 6), dpi=100)
? ? ax1.plot(df.temperature, marker='o', linestyle='--', linewidth=1, markersize=3, color='g')
? ? maxi = round(df.temperature.max() + 3)
? ? ax1.set_xlim([START, END])
? ? ax1.set_ylim([0, maxi])
? ? ax1.set_ylabel('TEMPERATURE', color='green')
? ? ax2.plot(df.windSpeed, marker='o', linestyle='--', linewidth=1, markersize=3, color='b')
? ? maxi = round(df.windSpeed.max() + 3)
? ? ax2.set_xlim([START, END])
? ? ax2.set_ylim([0, maxi])
? ? ax2.set_ylabel('WIND', color='blue')
? ? ax3.plot(df.visibility, marker='o', linestyle='--', linewidth=1, markersize=3, color='r')
? ? maxi = round(df.visibility.max() + 3)
? ? ax3.set_xlim([START, END])
? ? ax3.set_ylim([0, maxi])
? ? ax3.set_ylabel('VISIBILITY', color='red')
frames = []
for date in pd.date_range(start=df.index[0], end=df.index[-1], freq='1M'):
? ? frame = plot(df, date)
? ? frames.append(frame)
gif.save(frames, "文件名稱.gif", duration=0.5, unit='s')output:

五、動(dòng)態(tài)氣泡圖
最后我們用plotly模塊來繪制一個(gè)動(dòng)態(tài)的氣泡圖,
代碼如下:
import gif
import plotly.graph_objects as go
import numpy as np
np.random.seed(1)
N = 100
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
sz = np.random.rand(N) * 30
layout = go.Layout(
? ? xaxis={'range': [-2, 2]},
? ? yaxis={'range': [-2, 2]},
? ? margin=dict(l=10, r=10, t=10, b=10)
)
@gif.frame
def plot(i):
? ? fig = go.Figure(layout=layout)
? ? fig.add_trace(go.Scatter(
? ? ? ? x=x[:i],
? ? ? ? y=y[:i],
? ? ? ? mode="markers",
? ? ? ? marker=go.scatter.Marker(
? ? ? ? ? ? size=sz[:i],
? ? ? ? ? ? color=colors[:i],
? ? ? ? ? ? opacity=0.6,
? ? ? ? ? ? colorscale="Viridis"
? ? ? ? )
? ? ))
? ? fig.update_layout(width=500, height=300)
? ? return fig
frames = []
for i in range(100):
? ? frame = plot(i)
? ? frames.append(frame)
gif.save(frames, "bubble.gif")output:

到此這篇關(guān)于如何利用 Python 繪制動(dòng)態(tài)可視化圖表的文章就介紹到這了,更多相關(guān)Python 繪制動(dòng)態(tài)可視化圖表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3.4學(xué)習(xí)筆記之常用操作符,條件分支和循環(huán)用法示例
這篇文章主要介紹了Python3.4常用操作符,條件分支和循環(huán)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python3.4常見的數(shù)學(xué)運(yùn)算、邏輯運(yùn)算操作符,條件分支語句,循環(huán)語句等功能與基本用法,需要的朋友可以參考下2019-03-03
python中pop()函數(shù)的語法與實(shí)例
這篇文章主要給大家介紹了關(guān)于python中pop()函數(shù)語法與實(shí)例的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Django框架 Pagination分頁實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Django框架 Pagination分頁實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
python保留小數(shù)函數(shù)的幾種使用總結(jié)
本文主要介紹了python保留小數(shù)函數(shù)的幾種使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python實(shí)現(xiàn)的基于優(yōu)先等級(jí)分配糖果問題算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的基于優(yōu)先等級(jí)分配糖果問題算法,涉及Python針對列表的遍歷、判斷、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04

