0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ゲーミング円運動

Posted at

はじめに

本記事は筆者が「ぬるぬる動くグラフが作りてえな~」と思って作ったものの副産物です。
解説に誤りがあるかもしれませんので見つけたら教えてください。

使用ライブラリ

・matplotlib
 - .animation
 - .pyplot

・numpy

ライブラリ説明

・matplotlib
言わずと知れたグラフ描画ライブラリです。

・.animation
グラフを更新するモジュールみたいです。

・.pyplot
グラフを描画するモジュールみたいです。

・numpy
言わずと知れた配列・数学関数のライブラリです。

ソースコード

gaming_circle.py

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation

n = 50
arry = np.linspace(0, 2*np.pi, n)
x = np.cos(arry)
y = np.sin(arry)


fig, axes = plt.subplots()
ims = []
z = [0 for _ in range(n)]
cline = np.linspace(-1, 1, n)

axes.plot(x,y, color='0.5')
axes.plot(cline,z, color='0.9')
axes.plot(z,cline, color='0.9')
axes.set_xlabel('x')
axes.set_ylabel('y')

for i in range(n):

    p1 = axes.plot(x[i], y[i], marker = 'o', markersize = 20)
    p2 = axes.plot(x[i], 0, marker = 'o', markersize = 20)
    p3 = axes.plot(0, y[i], marker = 'o', markersize = 20)    
    ims.append(p1 + p2 + p3)

ani = animation.ArtistAnimation(fig, ims, interval=50)

plt.show()

実際に動いているとこです。
party_plot.gif

上から順に解説

import節は飛ばします

n = 50
arry = np.linspace(0, 2*np.pi, n)
x = np.cos(arry)
y = np.sin(arry)

円を描く準備をしています。
0~2πまでの数値を50分割で用意して、xy座標を求めます。

fig, axes = plt.subplots()
ims = []
z = [0 for _ in range(n)]
cline = np.linspace(-1, 1, n)

グラフの準備をしています。
fig, axes はグラフの描画領域にあたるものです。
ims にはアニメーションのパーツとなるグラフを格納させます。
z と cline は背景の円と縦横線を描くための配列です。

axes.plot(x,y, color='0.5')
axes.plot(cline,z, color='0.9')
axes.plot(z,cline, color='0.9')
axes.set_xlabel('x')
axes.set_ylabel('y')

上の用意を元に背景等をセットしています。

for i in range(n):
    p1 = axes.plot(x[i], y[i], marker = 'o', markersize = 20)
    p2 = axes.plot(x[i], 0, marker = 'o', markersize = 20)
    p3 = axes.plot(0, y[i], marker = 'o', markersize = 20)    
    ims.append(p1 + p2 + p3)

グラフのパーツを作成しています。
p1,p2,p3はそれぞれゲーミング円運動と写像を1ステップ1フレームで作成します。
それをimsに格納していきます。

ani = animation.ArtistAnimation(fig, ims, interval=50)
plt.show()

グラフを表示させます。
ani で描くグラフと更新頻度を設定し、plt.show()で表示します。

また、

ani.save('party_plot.gif', writer='pillow')

と追加することで簡単にGIF化できます。

おわりに

クソアプリの元にできそうな気がするんですが、もう一つ何か欲しいですね。
パッと思いつくのは例のゲーミング鳥あたりですが、関数ゲーミング鳥は先駆者がいらっしゃいました。
私は発想力が貧困なので今はこれが限界です。
何か思いついたら追記するかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?