跳轉到

動畫

econ-viz 提供以 Animator 為核心的輕量 GIF 流程。API 跟一般繪圖差不多:寫一個frame factory,每次回傳一個新的 Canvas 或 Figure,再掃過一串數值影格,最後存成 GIF。

安裝

uv add "econ-viz[animation]"

如果也要筆記本互動元件,就安裝:

uv add "econ-viz[all]"

最簡範例

import numpy as np

from econ_viz import Canvas, levels, solve
from econ_viz.animation import Animator
from econ_viz.models import CobbDouglas

def draw(px: float) -> Canvas:
    model = CobbDouglas(alpha=0.5, beta=0.5)
    eq = solve(model, px=px, py=2.0, income=20.0)
    lvls = levels.around(eq.utility, n=5)

    return (
        Canvas(
            x_max=14, y_max=12,
            x_label="X_1", y_label="X_2",
            title="Price sweep"
        )
        .add_utility(model, levels=lvls)
        .add_budget(px=px, py=2.0, income=20.0, fill=True)
        .add_equilibrium(eq, show_ray=True, drop_dashes=True)
    )

Animator(draw, frames=np.linspace(1.0, 6.0, 45)).save(
    "price_sweep.gif",
    fps=12,
    dpi=120,
)

教學用動畫

範例腳本 examples/animation.py 會產生以下幾類動畫:

  • 參數變動:價格與所得固定,只改變效用函數的某個參數。
  • 價格變動:效用函數與 \(p_y\) 固定,只改變 \(p_x\)。
  • 所得變動:效用函數與價格固定,只改變所得。
  • 只有預算線:完全拿掉效用圖層,讓學生專心觀察預算線怎麼移動。

文件網站直接嵌入同一批 GIF,所以這裡看到的就是本機產生的結果。

參數變動

改變效用函數的參數,觀察偏好圖的形狀如何隨之改變。

Cobb-Douglas Cobb-Douglas 參數變動 GIF
改變 \(\alpha\),並令 \(\beta = 1 - \alpha\)
CES CES 參數變動 GIF
改變 \(\rho\),調整曲率與替代程度
完全替代 完全替代參數變動 GIF
固定 \(b\),改變 \(a\)
完全互補 完全互補參數變動 GIF
固定 \(b\),改變 \(a\),讓拗折點的路徑移動

價格變動

固定效用函數與背景無異曲線的效用水準,只改變一項商品的價格,呈現預算線旋轉時的均衡路徑。

Cobb-Douglas Cobb-Douglas 價格變動 GIF
價格變動,\(p_y\) 固定
CES CES 價格變動 GIF
價格變動,效用曲面固定
完全替代 完全替代價格變動 GIF
預算線旋轉
完全互補 完全互補價格變動 GIF
價格變動,直角無異曲線固定
只有預算線 只有預算線的價格變動 GIF
價格變動,單獨呈現限制式的旋轉

所得變動

固定效用函數與價格,只改變所得,呈現預算線平行移動時的均衡路徑。

Cobb-Douglas Cobb-Douglas 所得變動 GIF
所得變動,價格固定
CES CES 所得變動 GIF
所得變動,價格與效用函數固定
完全替代 完全替代所得變動 GIF
所得變動
完全互補 完全互補所得變動 GIF
所得變動,價格固定
只有預算線 只有預算線的所得變動 GIF
所得變動,單獨呈現限制式的平行移動

匯出說明

GIF 匯出有以下特性:

  • Animator.save() 使用 Pillow,不需要 ffmpeg。
  • 匯出前,每一格都會先疊在白色背景上,避免影格殘影堆疊。
  • 每個動畫都可以分別設定 fps、dpi 與 loop。

留言