# Google Colabでの設定 from IPython.display import HTML import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation
# データの生成 x = np.linspace(-2 * np.pi, 2 * np.pi, 200) y = np.linspace(-2 * np.pi, 2 * np.pi, 200) x, y = np.meshgrid(x, y) z = np.sin(np.sqrt(x**2 + y**2))
from IPython.display import HTML import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation
ax.plot_surface(x, y, z, cmap='viridis'): x, y, zのデータを用いて3Dサーフェスプロットを作成。 cmap='viridis'はカラーマップを指定。
5. アニメーションの更新関数
1 2 3 4 5 6 7
defupdate(frame): global z, line ax.clear() z = np.sin(np.sqrt(x**2 + y**2) + frame / 10.0) line = ax.plot_surface(x, y, z, cmap='viridis') ax.set_zlim(-1, 1) return line,
update(frame): アニメーションの各フレームで呼び出される関数。
ax.clear(): 現在のプロットをクリア。
z = np.sin(np.sqrt(x**2 + y**2) + frame / 10.0): zの値をフレームごとに更新。
line = ax.plot_surface(x, y, z, cmap='viridis'): 更新されたzの値で新しいサーフェスプロットを作成。
ax.set_zlim(-1, 1): z軸の範囲を設定。
return line,: 更新されたプロットを返す。
6. アニメーションの設定
1
ani = FuncAnimation(fig, update, frames=200, interval=50, blit=False)
import random import networkx as nx import matplotlib.pyplot as plt
# バーンズリーのシダ生成関数 defbarnsley_fern(n): # 初期条件 x, y = 0, 0 points = [(x, y)] # バーンズリーのシダ生成 for _ inrange(n): r = random.random() if r <= 0.01: x, y = 0, 0.16 * y elif r <= 0.86: x, y = 0.85 * x + 0.04 * y, -0.04 * x + 0.85 * y + 1.6 elif r <= 0.93: x, y = 0.20 * x - 0.26 * y, 0.23 * x + 0.22 * y + 1.6 else: x, y = -0.15 * x + 0.28 * y, 0.26 * x + 0.24 * y + 0.44 points.append((x, y)) return points
# バーンズリーのシダを生成 fern_points = barnsley_fern(10000)
# グラフの作成 G = nx.Graph()
# ノードの追加 for i, (x, y) inenumerate(fern_points): G.add_node(i, pos=(x, y))
# エッジの追加 for i inrange(len(fern_points) - 1): G.add_edge(i, i+1)
# バーンズリーのシダ生成 for _ inrange(n): r = random.random() # 0から1の乱数を生成 if r <= 0.01: x, y = 0, 0.16 * y elif r <= 0.86: x, y = 0.85 * x + 0.04 * y, -0.04 * x + 0.85 * y + 1.6 elif r <= 0.93: x, y = 0.20 * x - 0.26 * y, 0.23 * x + 0.22 * y + 1.6 else: x, y = -0.15 * x + 0.28 * y, 0.26 * x + 0.24 * y + 0.44 points.append((x, y)) # 新しい座標をリストに追加