回答編集履歴
2
説明追加
test
CHANGED
@@ -1,3 +1,131 @@
|
|
1
|
+
-さらにコメントを受けて-
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
返答遅くなりました。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
fancanimation関数について調べたところ、参考記事にて、複数のグラフについてアニメーションを行う場合、プロットデータを別々に書くのがよろしいと書いてありました。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
参考記事:[matplotlibで複数のグラフをアニメーションさせる](https://qiita.com/taroc/items/da583655f89cb61a0c93)
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
今回の場合、以下のようなコードにするとよいかと思います。一応アニメーション動作確認済みです。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
```python
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
(前略)
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
def update_lines(num,data1,data2,lines1,lines2, points1,points2):
|
30
|
+
|
31
|
+
for dat1,dat2,line1,line2,point1, point2 in zip(data1,data2,lines1,lines2, points1,points2):
|
32
|
+
|
33
|
+
point1.set_data(dat1[0:2, num+1])
|
34
|
+
|
35
|
+
point1.set_3d_properties(dat1[2, num+1])
|
36
|
+
|
37
|
+
point2.set_data(dat2[0:2, num+1])
|
38
|
+
|
39
|
+
point2.set_3d_properties(dat2[2, num+1])
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
#下記コードのように分割して書いても可能
|
44
|
+
|
45
|
+
# for dat1,line1,point1 in zip(data1,lines1, points1):
|
46
|
+
|
47
|
+
# point1.set_data(dat1[0:2, num+1])
|
48
|
+
|
49
|
+
# point1.set_3d_properties(dat1[2, num+1])
|
50
|
+
|
51
|
+
# for dat2,line2,point2 in zip(data2,lines2, points2):
|
52
|
+
|
53
|
+
# point2.set_data(dat2[0:2, num+1])
|
54
|
+
|
55
|
+
# point2.set_3d_properties(dat2[2, num+1])
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
return lines1,lines2
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
# Attaching 3D axis to the figure
|
64
|
+
|
65
|
+
fig = plt.figure()
|
66
|
+
|
67
|
+
ax = fig.gca(projection='3d')
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
# Lines to plot in 3D
|
72
|
+
|
73
|
+
t = np.linspace(-3, 2, 30)
|
74
|
+
|
75
|
+
z = np.linspace(-3, 2, 30)
|
76
|
+
|
77
|
+
r = np.linspace(-3, 2, 30)
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
#data,lines,pointsについてそれぞれ定義する
|
82
|
+
|
83
|
+
x1, y1, z1 = x1, y1, z1
|
84
|
+
|
85
|
+
x2, y2, z2 = x2, y2, z2
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
data1 = np.array([[x1,y1,z1]])
|
90
|
+
|
91
|
+
data2 = np.array([[x2,y2,z2]])
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
lines1=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1] )[0] for dat in data1]
|
96
|
+
|
97
|
+
lines2=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1] )[0] for dat in data2]
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
points1=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1], 'o')[0] for dat in data1]
|
102
|
+
|
103
|
+
points2=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1], 'o')[0] for dat in data2]
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
#アニメーション
|
108
|
+
|
109
|
+
line_ani = animation.FuncAnimation(fig, update_lines, 300, fargs=(data1,data2,lines1,lines2, points1,points2),
|
110
|
+
|
111
|
+
interval=1000, init_func=init, blit=True, repeat=True)
|
112
|
+
|
113
|
+
```
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
動作確認・ご検討よろしくおねがいします。
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
---
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
|
128
|
+
|
1
129
|
-コメントを受けて-
|
2
130
|
|
3
131
|
|
1
コードの追記
test
CHANGED
@@ -1,3 +1,109 @@
|
|
1
|
+
-コメントを受けて-
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
こちらが提案したコードの問題でしょう。割とこちらも模索してる状態なので…申し訳ないです。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
現状思いつく改善案を2つ上げておきます。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
```python
|
14
|
+
|
15
|
+
#改善案1
|
16
|
+
|
17
|
+
#処理順を考えると点1が動いてから点2が動く、という要望とは少し違う動作になる可能性が高い
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
x1, y1, z1 = x1, y1, z1
|
22
|
+
|
23
|
+
datas=[]
|
24
|
+
|
25
|
+
#変数名の重複を防ぐためdataからdatapに変更
|
26
|
+
|
27
|
+
datap = np.array([[x1,y1,z1]])
|
28
|
+
|
29
|
+
datas.append(datap)
|
30
|
+
|
31
|
+
x2, y2, z2 = x2, y2, z2
|
32
|
+
|
33
|
+
#同様にdatapに変更
|
34
|
+
|
35
|
+
datap = np.array([[x2,y2,z2]])
|
36
|
+
|
37
|
+
datas.append(datap)
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
lines=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1] )[0] for dat in data for data in datas]#2重のfor文に変える
|
42
|
+
|
43
|
+
points=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1], 'o')[0] for dat in data for data in datas]
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
for data in datas:
|
48
|
+
|
49
|
+
line_ani = animation.FuncAnimation(fig, update_lines, 300, fargs=(data,lines, points),
|
50
|
+
|
51
|
+
interval=10, init_func=init, blit=True, repeat=True)
|
52
|
+
|
53
|
+
```
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
```python
|
60
|
+
|
61
|
+
#改善案2
|
62
|
+
|
63
|
+
#2点を同時に移動させたい、がうまく動作しないかもしれない
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
def update_lines(num, datas, lines,points):
|
68
|
+
|
69
|
+
for data in datas:
|
70
|
+
|
71
|
+
for dat,line, point in zip(data,lines, points):
|
72
|
+
|
73
|
+
point.set_data(dat[0:2, num+1])
|
74
|
+
|
75
|
+
point.set_3d_properties(dat[2, num+1])
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
return lines
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
#中略
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
line_ani = animation.FuncAnimation(fig, update_lines, 300, fargs=(datas,lines, points),
|
88
|
+
|
89
|
+
interval=10, init_func=init, blit=True, repeat=True)
|
90
|
+
|
91
|
+
```
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
動作確認・ご検討よろしくおねがいします。
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
-追記終わり-
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
---
|
104
|
+
|
105
|
+
|
106
|
+
|
1
107
|
追記部分に関する回答になります。
|
2
108
|
|
3
109
|
|
@@ -8,19 +114,23 @@
|
|
8
114
|
|
9
115
|
```ここに言語を入力
|
10
116
|
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
|
11
121
|
x1, y1, z1 = x1, y1, z1
|
12
122
|
|
13
123
|
datas=[]#データリスト
|
14
124
|
|
15
|
-
data = np.array([[x1,y1,z1]])#プロットするデータ
|
125
|
+
datap = np.array([[x1,y1,z1]])#プロットするデータ
|
16
126
|
|
17
|
-
datas.append(data)#データをリストに入れる
|
127
|
+
datas.append(datap)#データをリストに入れる
|
18
128
|
|
19
129
|
x2, y2, z2 = x2, y2, z2#プロットするデータ
|
20
130
|
|
21
|
-
data = np.array([[x2,y2,z2]])#プロットするデータ
|
131
|
+
datap = np.array([[x2,y2,z2]])#プロットするデータ
|
22
132
|
|
23
|
-
datas.append(data)
|
133
|
+
datas.append(datap)
|
24
134
|
|
25
135
|
|
26
136
|
|
@@ -28,6 +138,10 @@
|
|
28
138
|
|
29
139
|
points=[ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1], 'o')[0] for dat in data for data in datas]
|
30
140
|
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
|
31
145
|
```
|
32
146
|
|
33
147
|
|