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

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

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

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

Q&A

解決済

2回答

2322閲覧

CSVのファイルの行を順番に読み込みながらグラフ表示し、古い行の表示を消していきたい

Masarukun

総合スコア15

Python

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

0グッド

0クリップ

投稿2019/05/23 07:08

実験で得たデータをCSV※ファイルに格納しています。
データ表示に動きを出すため、アニメーション機能を使っています。
append関数を使った下記のコードで意図に近くなってきましたが、欲を言えば古い行の表示は徐々に消していきたいです。5行分のデータを画面表示したいのです(つまり1行目からスタートして5行分までは全部表示、6行目を読んだら1行目のデータは表示しない・・・・という感じで余韻表示が徐々に無くなっていくイメージ)

考えていたらだんだん分からなくなってきましたので、恥ずかしながらアドバイスいただいてよろしいでしょうか?

※CSVの中身は下記のような感じで、とりあえず100行目まで続く、というファイルになってます。
486.771 157.237 518.973
472.723 165.228 504.937
464.701 167.175 494.831
458.672 167.36 488.81
454.565 167.269 478.738
442.645 167.294 472.727
432.504 167.237 460.641
424.523 167.244 456.53
416.476 167.245 444.599
408.457 169.255 440.483
406.403 169.281 432.559
535.028 165.262 565.115
530.968 163.242 557.194
525.019 165.193 555.088
372.225 171.333 394.394
360.146 173.287 390.245
352.14 173.33 378.283
344.044 171.309 374.172
488.746 167.199 516.949
328.128 173.35 360.167
474.847 167.361 504.934
470.734 169.296 496.835
458.609 169.348 486.815

import matplotlib.pyplot as plt import matplotlib.animation as animation import csv %matplotlib notebook reader = pd.read_csv("json_experiment sum.csv",header = None) if __name__ == "__main__": fig = plt.figure() ims = [] cnt2 = 0 for i in range(100): im = plt.plot(reader.head(cnt2)) ims.append(im) cnt2+=1 #アニメーション作成 ani = animation.ArtistAnimation(fig, ims, interval=200, repeat_delay=1000)

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

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

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

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

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

guest

回答2

0

python

1import pandas as pd 2import matplotlib.pyplot as plt 3import matplotlib.animation as animation 4%matplotlib notebook 5 6data = pd.read_csv("test.csv", header=None) 7 8fig, ax = plt.subplots() 9 10rows = 5 # 表示する行数 11 12# 表示範囲を固定する。 13ax.set_xlim(0, len(data.index)) 14ax.set_ylim(data.values.min(), data.values.max()) 15 16frames = [] 17for i in range(0, len(data.index) - rows + 1): 18 sub = data.iloc[i:i + rows] 19 lines = ax.plot(sub) 20 frames.append(lines) 21 22ani = animation.ArtistAnimation(fig, frames, interval=200, repeat_delay=1000) 23ani.save('animation.gif')

イメージ説明

投稿2019/05/23 07:36

tiitoi

総合スコア21956

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

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

Masarukun

2019/05/23 08:07

ilocをこういう風に使えばいいのですね!
guest

0

ベストアンサー

以下のように[i-5:i]のようにスライス表現で5個ずつ渡せばよいかと思います。
なお、提示データは3列あるようですが、plotは2変数を取るので以下ではx,yの2つを渡しています。

Python

1import matplotlib.pyplot as plt 2import matplotlib.animation as animation 3import csv 4import pandas as pd 5 6# ダミーデータ 7import numpy as np 8reader = pd.DataFrame({'x':list(range(100)),'y':list(np.random.randn(100))}) 9 10x = reader['x'].tolist() 11y = reader['y'].tolist() 12 13if __name__ == "__main__": 14 fig = plt.figure() 15 ims = [] 16 for i in range(100): 17 im, = plt.plot(x[i-5:i],y[i-5:i],color='red') # 直近5個ずつ表示 18 ims.append([im]) 19 20 #アニメーション作成 21 ani = animation.ArtistAnimation(fig, ims, interval=200, repeat_delay=1000) 22 23plt.show()

イメージ説明

投稿2019/05/23 07:39

編集2019/05/23 07:40
can110

総合スコア38262

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問