Pythonで図形を動かす方法について

Python,イメージ

AI実装検定のご案内

Pythonでは、さまざまな方法で図形を動かすアニメーションを作成することができます。

本記事では、Google Colab上で実行可能な方法に絞って、図形を動かすための基本的な実装と考え方を丁寧に紹介します。

目次

なぜColabではGUIが使えないのか?

Pythonでアニメーションを作る際に一般的なツールとしては以下があります。

  • Tkinter:Python標準のGUIツール(ウィンドウ表示)
  • Pygame:ゲーム開発向けのアニメーションツール(ゲームウィンドウ)
  • matplotlib.animation:データ可視化や簡易アニメーション向け

しかし、Google Colabはクラウド上で動作するノートブック環境のため、TkinterPygameのようにローカルGUIを必要とするツールは使えません。

その代わりに、HTMLベースでアニメーションを表示できるmatplotlib.animationが最も相性が良く、Colab上でも簡単に動かすことができます。

実践:Matplotlibで図形を動かすアニメーションを作ろう

ここでは、matplotlibFuncAnimationを使って、赤い点が左右に動きながら上下に揺れるアニメーションを作ってみましょう。

Colab完全対応コード

以下のコードをColabにコピーして、1つのセルで実行してください。

# ライブラリの読み込み
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np

# グラフの準備
fig, ax = plt.subplots()
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)

# 点の準備(赤い円)
point, = ax.plot([], [], 'ro', markersize=10)

# 初期化関数(描画前に呼び出される)
def init():
    point.set_data([], [])
    return point,

# フレームごとの更新関数
def update(frame):
    x = frame / 10
    y = np.sin(x) + 5  # 上下に揺れる動き
    # 修正: xをリストに変換
    point.set_data([x], [y])  # x and y should be sequences
    return point,

# アニメーションの生成(blit=Trueで高速化)
ani = animation.FuncAnimation(
    fig, update, frames=np.arange(0, 100),
    init_func=init, blit=True, interval=50
)

# Google Colabで表示
from IPython.display import HTML
HTML(ani.to_jshtml())

実行結果

実行すると、赤い点が画面の左から右へ移動しながら上下にスイングするアニメーションが表示されます。

コードのポイント解説

要素説明
plot([], [], 'ro')最初は空の点を描画。赤い円(’ro’)として表示
update(frame)frameに応じてxとyの座標を毎回更新
ani.to_jshtml()Colab上でHTMLアニメーションとして出力

この仕組みを応用すれば、折れ線グラフ・散布図・棒グラフのアニメーションなども作成可能です。

注意点とよくあるトラブル

HTML表示されないときの対処法

  • セルの実行が完了するまで待つ(HTMLアニメーション生成に時間がかかることがあります)
  • ani.to_jshtml() が入っているセルは必ず単独で実行するようにしましょう

エラーメッセージが出る場合

  • matplotlibが未インストールの場合は、以下のようにセルの最初に追加してから再実行してみてください。
!pip install matplotlib

まとめ

Google ColabでもPythonを使って簡単に図形を動かすアニメーションが作れます。

TkinterPygameが使えない制約はありますが、matplotlib.animationを使えば、教育・研究・プレゼン用途でも十分活用可能です。

以上、Pythonで図形を動かす方法についてでした。

最後までお読みいただき、ありがとうございました。

関連リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次