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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

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

NumPy

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

1301閲覧

グラフをファイルに保存する際の追加

eggkun

総合スコア7

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

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

NumPy

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/09/21 07:36

編集2021/09/24 04:47

前提・実現したいこと

現在、デバイスから受け取ったデータをグラフに描画しそのデータをファイルに保存しています。
しかし、配列数が横軸になるためcsvファイルへの保存も100個の値しかできていない状態(100を超えると1列目が消えて繰り上がり100列目に101個目の値が保存されます)です。
配列数を増やし、グラフでは横軸に限りを設けて対応しようとしましたがうまく行きませんでした。
現在は、100を超えても101・102…とデータが追加されるように努めています。
何か解決策あれば回答お願いします。

該当のソースコード

python

1import thinkgear 2import re 3import matplotlib.pyplot as plt 4import numpy as np 5import csv 6 7PORT = '/dev/tty.MindWaveMobile-SerialPo' 8 9attention_array = np.zeros(100) 10meditation_array = np.zeros(100) 11 12 13#fig = plt.figure() 14 15def Plot(attention_array, meditation_array): 16 plt.subplot(5,2,1) 17 line, = plt.plot(attention_array, color = 'red') 18 plt.ylabel("Attention") 19 20 plt.subplot(5,2,2) 21 line2, = plt.plot(meditation_array, color = 'blue') 22 plt.ylabel("Meditation") 23 24 25 plt.pause(0.01) 26 line.remove() 27 line2.remove() 28 29for packets in thinkgear.ThinkGearProtocol(PORT).get_packets(): 30 for p in packets: 31 32 if isinstance(p, thinkgear.ThinkGearRawWaveData): 33 continue 34 35 t = str(p) 36 if t != '': 37 differencer = t[0:1] 38 if int(differencer) == 2: 39 attention = t[1:] 40 attention_array = np.append(attention_array, attention) 41 attention_array = attention_array[1:101] 42 elif int(differencer) == 3: 43 meditation = t[1:] 44 meditation_array = np.append(meditation_array, meditation) 45 meditation_array = meditation_array[1:101] 46 47 48 data = [list(attention_array), list(meditation_array)] 49 list(attention_array).append(attention) 50 list(meditation_array).append(meditation) 51 52 with open('test.csv', 'w') as file: 53 writer = csv.writer(file, lineterminator = '\n') 54 writer.writerows(data) 55 56 57 Plot(attention_array, meditation_array) 58

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

根本的な問題は、グラフ描画とデータの保存を同じロジックで行おうとしていることのように見えます。

グラフ描画は、attentionとmeditationの過去一定時間の状態を、リアルタイムで表示したいということであり、データの保存はattentionとmeditationを時系列に保存したいということですね。

thinkgearがどういう情報を送ってきているかによりますが、以下の様に処理を分けた方が良いでしょう。

plain

1出力ファイルを開く 2繰り返し: パケットを受け取る 3  判定: attentionとmeditationの場合 4    保存する 5    描画用のデータを更新する。長さは常に100個 6    描画する 7出力ファイルを閉じる 8

というようにしてはどうでしょう。
後で解析したい場合は、attentionとmeditationが混在していても、その時点でいかようにも処理できますから、特にcsvにこだわる必要もないと思います。

投稿2021/09/21 09:57

ppaul

総合スコア24670

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

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

0

求める回答ではないかもしれませんが、私ならファイルに保存するデータは横方向ではなく縦方向に記録します。
以下概念コードです。

Python

1import numpy as np 2import csv 3 4attention_array = np.zeros(100) 5meditation_array = np.zeros(100) 6 7datas = []# 累積データ 8attention, meditation = 0,0 # 初期値 9 10for t in ['2a','3b','2c','3d']: 11 12 # ここの処理は変わらない 13 if t != '': 14 differencer = t[0:1] 15 if int(differencer) == 2: 16 attention = t[1:] 17 attention_array = np.append(attention_array, attention) 18 attention_array = attention_array[1:101] 19 elif int(differencer) == 3: 20 meditation = t[1:] 21 meditation_array = np.append(meditation_array, meditation) 22 meditation_array = meditation_array[1:101] 23 24 # 1回分のファイル保存用のデータを追加 25 datas.append([attention,meditation]) 26 27# 最後に一括書込み 28with open('test.csv', 'w') as file: 29 writer = csv.writer(file, lineterminator = '\n') 30 writer.writerows(datas)

結果例

a,0 a,b c,b c,d

投稿2021/09/21 08:56

can110

総合スコア38341

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問