回答編集履歴

3

初期データと追加データを別に描画するように

2017/07/11 04:21

投稿

8524ba23
8524ba23

スコア38337

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- 以下は3次元散布図に初期データを表示し、任意のタイミングで座標を追加し描画更新する例です。
13
+ 以下は3次元散布図に初期データを表示し、任意のタイミングで別データとして座標を追加し描画更新する例です。
14
14
 
15
15
  ```Python
16
16
 
@@ -50,9 +50,11 @@
50
50
 
51
51
  # 最初に描画データを与えておく必要あり
52
52
 
53
- lines, = ax.plot(d[:,0], d[:,1], d[:,2], "o", color="g", ms=16, mew=0.5)
53
+ l1, = ax.plot(d[:,0], d[:,1], d[:,2], "o", color="g", ms=16, mew=0.5) # 初期データ用
54
54
 
55
+ l2, = ax.plot([0], [0], [0], "o", color="b", ms=8, mew=0.5) # 追加データ用 初回はダミーをセット
56
+
55
- return lines # 呼出元で利用
57
+ return l1,l2 # 呼出元で利用
56
58
 
57
59
 
58
60
 
@@ -80,9 +82,9 @@
80
82
 
81
83
  # グラフの初期化
82
84
 
83
- lines = init_plot(d)
85
+ l1,l2 = init_plot(d) # l1=初期データ, l2=追加データ用
84
86
 
85
- update_plot(lines,d)
87
+ update_plot(l1,d)
86
88
 
87
89
 
88
90
 
@@ -90,11 +92,11 @@
90
92
 
91
93
 
92
94
 
93
- # 新たな座標を追加し描画更新
95
+ # データ追加し描画更新
94
96
 
95
- d = np.vstack((d,[-20,10,0]))
97
+ a = np.array([[-20,10,0]]) # 追加データ
96
98
 
97
- update_plot(lines,d)
99
+ update_plot(l2,a)
98
100
 
99
101
 
100
102
 
@@ -106,9 +108,9 @@
106
108
 
107
109
  for i in range(0,10):
108
110
 
109
- d = np.vstack((d,[i,i,2*i]))
111
+ a = np.vstack((a,[i,i,2*i]))
110
112
 
111
- update_plot(lines,d)
113
+ update_plot(l2,a)
112
114
 
113
115
 
114
116
 

2

3次元散布図にコード変更

2017/07/11 04:21

投稿

8524ba23
8524ba23

スコア38337

test CHANGED
@@ -2,17 +2,23 @@
2
2
 
3
3
  以下のページに具体的なサンプルコードが載っています。
4
4
 
5
+ 参考:
6
+
5
- 参考:[matplotlibでリアルタイム描画](http://qiita.com/hausen6/items/b1b54f7325745ae43e47)
7
+ [matplotlibでリアルタイム描画](http://qiita.com/hausen6/items/b1b54f7325745ae43e47)
8
+
9
+ [Python+Matplotlibでプロットアニメーションを作成する](http://qiita.com/wkentaro/items/128ceb1965731b6ef34c)
6
10
 
7
11
 
8
12
 
9
- 以下は散布図に初期データを表示し、任意のタイミングで座標を追加し描画更新する例です。
13
+ 以下は3次元散布図に初期データを表示し、任意のタイミングで座標を追加し描画更新する例です。
10
14
 
11
15
  ```Python
12
16
 
13
17
  import numpy as np
14
18
 
15
- import matplotlib.pyplot as plt
19
+ from matplotlib import pyplot as plt
20
+
21
+ from mpl_toolkits.mplot3d.axes3d import Axes3D
16
22
 
17
23
  import time
18
24
 
@@ -22,27 +28,29 @@
22
28
 
23
29
  def init_plot(d):
24
30
 
25
- # 散布図
26
-
27
31
  fig = plt.figure()
28
32
 
29
- ax = fig.add_subplot(111)
33
+ ax = fig.add_subplot(111, projection='3d')
30
34
 
31
- ax.set_xlabel('X-axis')
32
35
 
36
+
37
+ ax.set_xlabel("X-axis")
38
+
33
- ax.set_ylabel('Y-axis')
39
+ ax.set_ylabel("Y-axis")
40
+
41
+ ax.set_zlabel("Z-axis")
34
42
 
35
43
  ax.set_xlim(-30, 30)
36
44
 
37
45
  ax.set_ylim(-40, 20)
38
46
 
39
- ax.grid(True)
47
+ ax.set_zlim(-30, 20)
40
48
 
41
49
 
42
50
 
43
51
  # 最初に描画データを与えておく必要あり
44
52
 
45
- lines, = ax.plot(d[:,0], d[:,1], "o", color="g", ms=24, mew=0.5)
53
+ lines, = ax.plot(d[:,0], d[:,1], d[:,2], "o", color="g", ms=16, mew=0.5)
46
54
 
47
55
  return lines # 呼出元で利用
48
56
 
@@ -52,7 +60,9 @@
52
60
 
53
61
  def update_plot(lines,d):
54
62
 
55
- lines.set_data(d[:,0],d[:,1])
63
+ lines.set_data(d[:,0],d[:,1]) # x,y
64
+
65
+ lines.set_3d_properties(d[:,2]) # z
56
66
 
57
67
  plt.pause(.01)
58
68
 
@@ -60,13 +70,15 @@
60
70
 
61
71
  if __name__ == "__main__":
62
72
 
73
+
74
+
63
75
  # 最初から表示するデータ
64
76
 
65
- d = np.array([[-20,-30,0],[20,-30,1]])
77
+ d = np.array([[-20,-30,-20],[20,-30,-20]])
66
78
 
67
79
 
68
80
 
69
- # グラフの初期表示
81
+ # グラフの初期
70
82
 
71
83
  lines = init_plot(d)
72
84
 
@@ -80,7 +92,7 @@
80
92
 
81
93
  # 新たな座標を追加して描画更新
82
94
 
83
- d = np.vstack((d,[-20,10,2]))
95
+ d = np.vstack((d,[-20,10,0]))
84
96
 
85
97
  update_plot(lines,d)
86
98
 
@@ -90,11 +102,11 @@
90
102
 
91
103
 
92
104
 
93
- # ループで追加&描画更新
105
+ # ループで追加
94
106
 
95
107
  for i in range(0,10):
96
108
 
97
- d = np.vstack((d,[i,i,i]))
109
+ d = np.vstack((d,[i,i,2*i]))
98
110
 
99
111
  update_plot(lines,d)
100
112
 
@@ -102,4 +114,10 @@
102
114
 
103
115
  time.sleep(0.5)
104
116
 
117
+
118
+
119
+ # 最後に確認表示できるように
120
+
121
+ plt.show()
122
+
105
123
  ```

1

サンプルコードを追加

2017/07/11 02:59

投稿

8524ba23
8524ba23

スコア38337

test CHANGED
@@ -3,3 +3,103 @@
3
3
  以下のページに具体的なサンプルコードが載っています。
4
4
 
5
5
  参考:[matplotlibでリアルタイム描画](http://qiita.com/hausen6/items/b1b54f7325745ae43e47)
6
+
7
+
8
+
9
+ 以下は散布図に初期データを表示し、任意のタイミングで座標を追加し描画更新する例です。
10
+
11
+ ```Python
12
+
13
+ import numpy as np
14
+
15
+ import matplotlib.pyplot as plt
16
+
17
+ import time
18
+
19
+
20
+
21
+ # グラフの初期化
22
+
23
+ def init_plot(d):
24
+
25
+ # 散布図
26
+
27
+ fig = plt.figure()
28
+
29
+ ax = fig.add_subplot(111)
30
+
31
+ ax.set_xlabel('X-axis')
32
+
33
+ ax.set_ylabel('Y-axis')
34
+
35
+ ax.set_xlim(-30, 30)
36
+
37
+ ax.set_ylim(-40, 20)
38
+
39
+ ax.grid(True)
40
+
41
+
42
+
43
+ # 最初に描画データを与えておく必要あり
44
+
45
+ lines, = ax.plot(d[:,0], d[:,1], "o", color="g", ms=24, mew=0.5)
46
+
47
+ return lines # 呼出元で利用
48
+
49
+
50
+
51
+ # グラフの描画更新
52
+
53
+ def update_plot(lines,d):
54
+
55
+ lines.set_data(d[:,0],d[:,1])
56
+
57
+ plt.pause(.01)
58
+
59
+
60
+
61
+ if __name__ == "__main__":
62
+
63
+ # 最初から表示するデータ
64
+
65
+ d = np.array([[-20,-30,0],[20,-30,1]])
66
+
67
+
68
+
69
+ # グラフの初期表示
70
+
71
+ lines = init_plot(d)
72
+
73
+ update_plot(lines,d)
74
+
75
+
76
+
77
+ time.sleep(1)
78
+
79
+
80
+
81
+ # 新たな座標を追加して描画更新
82
+
83
+ d = np.vstack((d,[-20,10,2]))
84
+
85
+ update_plot(lines,d)
86
+
87
+
88
+
89
+ time.sleep(1)
90
+
91
+
92
+
93
+ # ループで追加&描画更新
94
+
95
+ for i in range(0,10):
96
+
97
+ d = np.vstack((d,[i,i,i]))
98
+
99
+ update_plot(lines,d)
100
+
101
+
102
+
103
+ time.sleep(0.5)
104
+
105
+ ```