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

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

ただいまの
回答率

89.97%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 620

Masarukun

score 7

実験で得たデータを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)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

import pandas as pd
import matplotlib.pyplot as plt 
import matplotlib.animation as animation
%matplotlib notebook

data = pd.read_csv("test.csv", header=None)

fig, ax = plt.subplots()

rows = 5  # 表示する行数

# 表示範囲を固定する。
ax.set_xlim(0, len(data.index))
ax.set_ylim(data.values.min(), data.values.max())

frames = []
for i in range(0, len(data.index) - rows + 1):
    sub = data.iloc[i:i + rows]
    lines = ax.plot(sub)
    frames.append(lines)

ani = animation.ArtistAnimation(fig, frames, interval=200, repeat_delay=1000)
ani.save('animation.gif')

イメージ説明

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/23 17:07

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

    キャンセル

checkベストアンサー

0

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

import matplotlib.pyplot as plt 
import matplotlib.animation as animation
import csv
import pandas as pd

# ダミーデータ
import numpy as np
reader = pd.DataFrame({'x':list(range(100)),'y':list(np.random.randn(100))})

x = reader['x'].tolist()
y = reader['y'].tolist()

if __name__ == "__main__":
    fig = plt.figure()
    ims = []
    for i in range(100):
        im, = plt.plot(x[i-5:i],y[i-5:i],color='red') # 直近5個ずつ表示
        ims.append([im])

    #アニメーション作成    
    ani = animation.ArtistAnimation(fig, ims, interval=200, repeat_delay=1000)

plt.show()


イメージ説明

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる