質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2613閲覧

pythonのベクトルアニメーション

ryoma1230

総合スコア12

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/18 07:07

前提・実現したいこと

pythonでベクトルのアニメーションを作りたい.
dataファイルはt:時間,n:x座標,m:y座標,u:x方向の速度,v:y方向の速度
t n m u v
[[ 1 1 -1 5 0]
[ 1 1 -2 0 0]
[ 1 1 -3 0 0]
[ 1 1 -4 0 0]
[ 1 1 -5 0 0]
[ 1 1 -6 0 0]
[ 1 1 -7 0 0]
[ 1 1 -8 0 0]
[ 1 1 -9 0 0]
[ 1 1 -10 -5 0]
[ 1 2 -1 5 0]
[ 1 2 -2 0 2]
[ 1 2 -3 0 0]
[ 1 2 -4 0 0]
[ 1 2 -5 0 0]
[ 1 2 -6 0 0]
[ 1 2 -7 0 0]
[ 1 2 -8 0 0]
[ 1 2 -9 0 1]
[ 1 2 -10 -5 0]
[ 1 3 -1 5 0]
[ 1 3 -2 0 0]
[ 1 3 -3 0 0]
[ 1 3 -4 0 0]
[ 1 3 -5 0 0]
[ 1 3 -6 0 0]
[ 1 3 -7 0 0]
[ 1 3 -8 0 0]
[ 1 3 -9 0 0]
[ 1 3 -10 -5 0]
[ 1 4 -1 5 0]
[ 1 4 -2 0 0]
[ 1 4 -3 0 1]
[ 1 4 -4 0 0]
[ 1 4 -5 0 0]
[ 1 4 -6 0 0]
[ 1 4 -7 0 0]
[ 1 4 -8 0 0]
[ 1 4 -9 0 0]
[ 1 4 -10 -5 0]
[ 1 5 -1 5 0]
[ 1 5 -2 0 0]
[ 1 5 -3 0 0]
[ 1 5 -4 0 0]
[ 1 5 -5 0 2]
[ 1 5 -6 0 0]
[ 1 5 -7 0 0]
[ 1 5 -8 0 0]
[ 1 5 -9 0 0]
[ 1 5 -10 -5 0]
[ 1 6 -1 5 0]
[ 1 6 -2 0 0]
[ 1 6 -3 0 0]
[ 1 6 -4 0 0]
[ 1 6 -5 0 0]
[ 1 6 -6 0 0]
[ 1 6 -7 0 0]
[ 1 6 -8 0 0]
[ 1 6 -9 0 0]
[ 1 6 -10 -5 0]
[ 1 7 -1 5 0]
[ 1 7 -2 0 0]
[ 1 7 -3 0 0]
[ 1 7 -4 0 0]
[ 1 7 -5 0 0]
[ 1 7 -6 0 0]
[ 1 7 -7 0 2]
[ 1 7 -8 0 0]
[ 1 7 -9 0 0]
[ 1 7 -10 -5 0]
[ 1 8 -1 5 0]
[ 1 8 -2 0 0]
[ 1 8 -3 0 0]
[ 1 8 -4 0 0]
[ 1 8 -5 0 0]
[ 1 8 -6 0 0]
[ 1 8 -7 0 0]
[ 1 8 -8 0 0]
[ 1 8 -9 0 0]
[ 1 8 -10 -5 0]
[ 1 9 -1 5 0]
[ 1 9 -2 0 0]
[ 1 9 -3 0 0]
[ 1 9 -4 0 0]
[ 1 9 -5 0 0]
[ 1 9 -6 0 1]
[ 1 9 -7 0 0]
[ 1 9 -8 0 0]
[ 1 9 -9 0 0]
[ 1 9 -10 -5 0]
[ 1 10 -1 5 0]
[ 1 10 -2 0 0]
[ 1 10 -3 0 0]
[ 1 10 -4 0 0]
[ 1 10 -5 0 0]
[ 1 10 -6 0 0]
[ 1 10 -7 0 0]
[ 1 10 -8 0 0]
[ 1 10 -9 0 0]
[ 1 10 -10 -5 0]
[ 2 1 -1 5 0]
[ 2 1 -2 0 0]
[ 2 1 -3 0 0]
[ 2 1 -4 0 0]
[ 2 1 -5 0 0]
[ 2 1 -6 0 0]
[ 2 1 -7 0 0]
[ 2 1 -8 0 0]
[ 2 1 -9 0 0]
[ 2 1 -10 -5 0]
[ 2 2 -1 5 0]
・・・
[100 9 -9 -2 0]
[100 9 -10 -5 0]
[100 10 -1 5 0]
[100 10 -2 3 0]
[100 10 -3 2 0]
[100 10 -4 1 0]
[100 10 -5 0 0]
[100 10 -6 0 0]
[100 10 -7 -1 0]
[100 10 -8 -2 0]
[100 10 -9 -4 0]
[100 10 -10 -5 0]]
となっています.

該当のソースコード

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
data=np.genfromtxt('data.csv',delimiter=',',dtype=int)
data_trans=np.transpose(data)

t=np.array(data_trans[0])
n=np.array(data_trans[1])
m=np.array(data_trans[2])
u=np.array(data_trans[3])
v=np.array(data_trans[4])
np.set_printoptions(threshold=np.inf)
fig=plt.figure()
ims=[]
for i in range(100):
a=100i
b=100
(i+1)
im=plt.quiver(n[a:b],m[a:b],u[a:b],v[a:b])
ims.append(im)
ani=animation.ArtistAnimation(fig,ims)
plt.show()

問題

imsのリストに画像が入っていくのですが,前の時間の画像の上に書かれてしまい,最終的には,このようになってしまいます.どうすればベクトルの時間変化がgifのようなアニメーションとして出力されるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

FuncAnimation を使って、その関数内で ax.quiver() を呼び出すとよいと思います。
以下にサンプルコードを貼っておきます。

サンプルコード

python

1import matplotlib.pyplot as plt 2import numpy as np 3from matplotlib.animation import FuncAnimation 4 5T, X, Y, U, V = np.loadtxt( 6 "arrows.csv", dtype=int, delimiter=",", skiprows=1, unpack=True 7) 8 9# 形状を (NumTimes * NumRows * NumCols,) -> (NumTimes, NumRows, NumCols) に変更する。 10rows, cols = 10, 10 # 1時刻あたりの行 x 列 11X = X.reshape(-1, rows, cols) 12Y = Y.reshape(-1, rows, cols) 13U = U.reshape(-1, rows, cols) 14V = V.reshape(-1, rows, cols) 15 16fig, ax = plt.subplots(figsize=(7, 7)) 17 18 19def update_quiver(i): 20 ax.cla() 21 ax.quiver(X[i], Y[i], U[i], V[i], pivot="mid", units="xy") 22 23 24anim = FuncAnimation(fig, update_quiver, frames=len(X), interval=300, blit=False) 25anim.save("animation.gif", writer="pillow")

入出力

以下の形式の CSV ファイルであることが前提

入力

csv

1t,n,m,u,v 20,0,0,-3,-5 30,0,1,-3,4 40,0,2,-3,5 50,0,3,0,4 60,0,4,-3,-3 70,0,5,1,4 80,0,6,-4,5 90,0,7,0,2 100,0,8,4,4 110,0,9,2,-5 120,1,0,5,-1 130,1,1,2,-4 140,1,2,1,-4 150,1,3,3,-2 160,1,4,3,-3 170,1,5,-5,3 180,1,6,5,0 190,1,7,0,-5 200,1,8,2,5 210,1,9,0,5 220,2,0,3,-1 230,2,1,-5,1 240,2,2,0,-2 250,2,3,2,-1 260,2,4,2,-5 270,2,5,-1,0 280,2,6,4,3 290,2,7,3,2 300,2,8,-5,-5 310,2,9,0,5 320,3,0,3,1 330,3,1,3,-5 340,3,2,0,0 350,3,3,4,-3 360,3,4,0,4 370,3,5,1,3 380,3,6,5,3 390,3,7,-3,-2 400,3,8,3,-3 410,3,9,4,1 420,4,0,5,-4 430,4,1,5,3 440,4,2,-5,5 450,4,3,4,2 460,4,4,0,1 470,4,5,-4,-4 480,4,6,2,-5 490,4,7,3,1 500,4,8,-1,-4 510,4,9,-1,-2 520,5,0,4,2 530,5,1,-1,-1 540,5,2,1,-2 550,5,3,-1,1 560,5,4,-2,-1 570,5,5,4,-1 580,5,6,-1,2 590,5,7,4,-1 600,5,8,-3,-1 610,5,9,3,-1 620,6,0,5,2 630,6,1,4,-1 640,6,2,4,5 650,6,3,1,1 660,6,4,-4,1 670,6,5,3,4 680,6,6,0,3 690,6,7,-4,-1 700,6,8,2,5 710,6,9,5,2 720,7,0,-3,1 730,7,1,-3,5 740,7,2,0,3 750,7,3,0,2 760,7,4,-1,5 770,7,5,-2,3 780,7,6,3,0 790,7,7,-3,-2 800,7,8,2,-3 810,7,9,-2,-1 820,8,0,-4,-3 830,8,1,-3,4 840,8,2,4,-4 850,8,3,0,1 860,8,4,-3,-3 870,8,5,5,3 880,8,6,-2,1 890,8,7,5,-5 900,8,8,-1,5 910,8,9,3,4 920,9,0,-2,0 930,9,1,2,0 940,9,2,-2,-2 950,9,3,-2,-2 960,9,4,5,-3 970,9,5,2,2 980,9,6,1,-3 990,9,7,-3,4 1000,9,8,-2,-5 1010,9,9,4,5 1021,0,0,1,-1 1031,0,1,3,-3 1041,0,2,1,3 10510614,8,9,1,1 10714,9,0,1,-2 10814,9,1,5,5 10914,9,2,-3,4 11014,9,3,2,-5 11114,9,4,1,1 11214,9,5,-3,5 11314,9,6,-3,-3 11414,9,7,-3,0 11514,9,8,-3,-5 11614,9,9,-1,-4

出力

イメージ説明


不明な点があれば、コメントしてください。

投稿2019/06/18 07:44

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryoma1230

2019/06/18 08:10

本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問