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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

2848閲覧

グラフへの自動プロット

Penefax

総合スコア38

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/06/15 01:13

いつもお世話になっております。

###前提・実現したいこと
プログラム(グラフ)を実行した状態のままCSVファイル(aiueo.csv)に値を追加(削除)した時に実行中のファイルに値を反映させる方法
アニメーションなども付加しているのでそれに影響がないように行いたい

###発生している問題・エラーメッセージ

やり方がわからない

###該当のソースコード
前回質問でアニメーションを付加したものです。

from

1import matplotlib.animation as animation 2from mpl_toolkits.mplot3d import Axes3D 3import numpy as np 4from scipy import genfromtxt 5 6# データ読み込み 7d = genfromtxt("aiueo.csv", delimiter=",") 8 9def animate(i, pl0,pl1,pl2): 10 pl0.set_data(d[:i,0], d[:i,1]) 11 pl0.set_3d_properties(d[:i,2]) 12 pl1.set_data(d[:i,0], d[:i,1]) 13 pl2.set_data(d[:i,2], d[:i,1]) 14 return pl0,pl1,pl1 15 16fig = pyplot.figure(figsize=(24,24)) 17 18# 3次元散布図 19ax = fig.add_subplot(121, projection='3d') 20ax.set_xlabel("X-axis") 21ax.set_ylabel("Y-axis") 22ax.set_zlabel("Z-axis") 23 24ax.set_xlim(-30, 30) 25ax.set_ylim(-40, 20) 26ax.set_zlim(100, 200) 27 28ax.plot(d[:,3], d[:,4], d[:,5], "o", color="g", ms=16, mew=0.5) 29pl0, = ax.plot([],[],[],"*", color="r", ms=16, mew=0.5) 30 31# 2次元グラフ1枚目 32ax = fig.add_subplot(222) 33ax.set_xlabel('x-axis') 34ax.set_ylabel('y-axis') 35ax.set_xlim(-30, 30) 36ax.set_ylim(-20, 20) 37 38ax.plot(d[:,3], d[:,4], "o", color="g", ms=24, mew=0.5) 39pl1, = ax.plot([], [], "*", color="r", ms=24, mew=0.5) 40ax.grid(True) 41 42# 2次元グラフ2枚目 43ax = fig.add_subplot(224) 44ax.set_xlabel('z-axis') 45ax.set_ylabel('y-axis') 46ax.set_xlim(100, 200) 47ax.set_ylim(-20,20) 48 49ax.plot(d[:,5], d[:,4], "o", color="g", ms=24, mew=0.5) 50pl2, = ax.plot([], [], "*", color="r", ms=24, mew=0.5) 51ax.grid(True) 52 53ani = animation.FuncAnimation(fig, animate, d.shape[0], fargs=(pl0,pl1,pl2), interval=0.25) 54 55pyplot.show()

###試したこと
対話モードなど検討してみたが行き詰ってしまった。

###補足情報(言語/FW/ツール等のバージョンなど)
windows10
python2.7
matplotlib
spyder

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえず、アニメーションの実装により、animate() 関数が定期的に呼ばれておりますので、この関数内にデータ更新&非アニメ部のグラフの更新をするようにするとよいのではないでしょうか。

ただ残念ながら、アニメーションのフレーム枚数を動的に更新する方法が見つかっておりませんので、この部分は何らかの工夫をする必要がありそうです。

ということで、とりあえずのサンプルはこんな感じです。
なお、データ更新時の例外処理などは一切行っておりません。

Python

1import matplotlib.pyplot as plt 2import matplotlib.animation as animation 3from mpl_toolkits.mplot3d import Axes3D 4import numpy as np 5from scipy import genfromtxt 6 7FRAME_NUM = 10 8 9def animate(i, pl0a,pl0b,pl1a,pl1b,pl2a,pl2c): 10 global d 11 if i == 0: 12 # データ更新処理 13 d = genfromtxt("aiueo.csv", delimiter=",") 14 # 非アニメ部グラフの更新 15 pl0a.set_data(d[:,3], d[:,4]) 16 pl0a.set_3d_properties(d[:,5]) 17 pl1a.set_data(d[:,3], d[:,4]) 18 pl2a.set_data(d[:,5], d[:,4]) 19 20 # i は 0~(FRAME_NUM-1)間で変化するので、 21 # データをどの範囲で表示するのかを決める 22 n = d.shape[0] - FRAME_NUM + i + 1 23 24 pl0b.set_data(d[:n,0], d[:n,1]) 25 pl0b.set_3d_properties(d[:n,2]) 26 pl1b.set_data(d[:n,0], d[:n,1]) 27 pl2b.set_data(d[:n,2], d[:n,1]) 28 return pl0a,pl0b,pl1a,pl1b,pl2a,pl2c 29 30#fig = plt.figure(figsize=(24,24)) 31fig = plt.figure() 32 33# 3次元散布図 34ax = fig.add_subplot(121, projection='3d') 35ax.set_xlabel("X-axis") 36ax.set_ylabel("Y-axis") 37ax.set_zlabel("Z-axis") 38 39ax.set_xlim(-30, 30) 40ax.set_ylim(-40, 20) 41ax.set_zlim(100, 200) 42 43pl0a, = ax.plot([],[],[], "o", color="g", ms=16, mew=0.5) 44pl0b, = ax.plot([],[],[],"*", color="r", ms=16, mew=0.5) 45 46# 2次元グラフ1枚目 47ax = fig.add_subplot(222) 48ax.set_xlabel('x-axis') 49ax.set_ylabel('y-axis') 50ax.set_xlim(-30, 30) 51ax.set_ylim(-20, 20) 52 53pl1a, = ax.plot([], [], "o", color="g", ms=24, mew=0.5) 54pl1b, = ax.plot([], [], "*", color="r", ms=24, mew=0.5) 55ax.grid(True) 56 57# 2次元グラフ2枚目 58ax = fig.add_subplot(224) 59ax.set_xlabel('z-axis') 60ax.set_ylabel('y-axis') 61ax.set_xlim(100, 200) 62ax.set_ylim(-20,20) 63 64pl2a, = ax.plot([], [], "o", color="g", ms=24, mew=0.5) 65pl2b, = ax.plot([], [], "*", color="r", ms=24, mew=0.5) 66ax.grid(True) 67 68ani = animation.FuncAnimation(fig, animate, FRAME_NUM, fargs=(pl0a,pl0b,pl1a,pl1b,pl2a,pl2b), interval=100) 69 70plt.show()

投稿2017/06/16 02:38

magichan

総合スコア15898

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問