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

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

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

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

NumPy

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

Python

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

Q&A

解決済

1回答

8289閲覧

データのグラフ化:複数のデータを一つのグラフまとめたいです。

vegasapo

総合スコア13

Matplotlib

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

NumPy

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

Python

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

0グッド

1クリップ

投稿2016/09/17 04:29

編集2016/09/18 15:02

###前提・実現したいこと
pythonで、同じディレクトリ内にある、複数のテキストデータから一つのグラフを作りたいと思っています。
環境はOS Xです。

処理したいテキストデータは以下のようなものです。

# 2016年09月09日 19時04分測定 #A #B #C #D 2.0000000E+0 -2.0000000E-7 4.2900000E-8 1.1816112E-3 1.9800000E+0 -2.0000000E-7 3.6000000E-8 1.1896633E-3 1.9600000E+0 -2.0000000E-7 3.4000000E-8 1.1655072E-3 1.9400000E+0 -2.0000000E-7 3.3000000E-8 1.1494031E-3 1.9200000E+0 -2.0000000E-7 3.2600000E-8 1.2138194E-3 1.9000000E+0 -2.0000000E-7 3.2600000E-8 1.2540795E-3 1.8800000E+0 -2.0000000E-7 3.3000000E-8 1.2943397E-3 1.8600000E+0 -2.1000000E-7 3.3900000E-8 1.1816112E-3 1.8400000E+0 -2.0000000E-7 3.5200000E-8 1.3023917E-3 1.8200000E+0 -2.1000000E-7 3.7100000E-8 1.3587560E-3 1.8000000E+0 -2.1000000E-7 3.9800000E-8 1.4392763E-3 1.7800000E+0 -2.1000000E-7 4.3200000E-8 1.5036926E-3 1.7600000E+0 -2.1000000E-7 4.7400000E-8 1.6566812E-3 1.7400000E+0 -2.1000000E-7 5.2400000E-8 1.6808373E-3 1.7200000E+0 -2.1000000E-7 5.8000000E-8 1.9465544E-3 1.7000000E+0 -2.1000000E-7 6.4400000E-8 2.1961675E-3 1.6800000E+0 -2.1000000E-7 7.1900000E-8 2.3813642E-3 1.6600000E+0 -2.1000000E-7 8.0700000E-8 2.6953935E-3 1.6400000E+0 -2.1000000E-7 9.0100000E-8 3.1946196E-3

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

すべてのデータが一つのグラフにまとまったものを作成したいのですが、
以下のソースコードで実行したところ、ディレクトリ内にあるファイル一つにつき、一つのグラフが作成されてしまいました。
どのようにすれば、一つのグラフ上にすべてのデータを重ねることができるでしょうか。
###該当のソースコード

python

1# -*- coding; utf-8 -*- 2import matplotlib.pyplot as plt 3import numpy as np 4import os 5import sys 6import codecs 7 8target_dir = sys.argv[1] if len(sys.argv) >= 2 else '.' 9 10for filename in os.listdir(target_dir): 11 path_in = os.path.join(target_dir, filename) 12 if not (os.path.isfile(path_in) and path_in.endswith('.txt')): 13 continue 14 15 fp = codecs.open(path_in, encoding='cp932', errors='ignore') 16 17 data = np.loadtxt(fp, comments='#' ,dtype='float' ,delimiter='\t' ,skiprows=1) 18 19 x_txt = data[:,0] 20 y_txt = data[:,3] 21 22 plt.figure(figsize=(8,5)) 23 plt.plot(x_txt,y_txt) 24plt.show()

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

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

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

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

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

guest

回答1

0

ベストアンサー

vegasapo様

泥臭い方法ですが、ファイルの数が限られているようであれば、以下のようにすれば重ねて書くことが可能です。

Python

1i=0 2 3for filename in os.listdir(target_dir): 4 path_in = os.path.join(target_dir, filename) 5 if not (os.path.isfile(path_in) and path_in.endswith('.txt')): 6 continue 7 8 fp = codecs.open(path_in, encoding='cp932', errors='ignore') 9 data = np.loadtxt(fp, comments='#' ,dtype='float' ,delimiter='\t' ,skiprows=1) 10 11 if i==0: 12 x_txt = data[:,0] 13 y_txt = data[:,3] 14 elif i==1: 15 x2_txt = data[:,0] 16 y2_txt = data[:,3] 17 elif i==2: 18 x3_txt = data[:,0] 19 y3_txt = data[:,3] 20 i=i+1 21 22plt.figure(figsize=(8,5)) 23plt.plot(x_txt,y_txt) 24plt.plot(x2_txt,y2_txt) 25plt.plot(x3_txt,y3_txt) 26plt.show()

もう少しスマートな方法が思いつきましたらご連絡させていただきます。

↓以下に変更後のコードを記載します。(改行を表示するために、以下回答欄の編集で再記させていただきます。)

Python

1 2for filename in os.listdir(target_dir): 3 path_in = os.path.join(target_dir, filename) 4 if not (os.path.isfile(path_in) and path_in.endswith('.txt')): 5 continue 6 7 fp = codecs.open(path_in, encoding='cp932', errors='ignore') 8 data = np.loadtxt(fp, comments='#' ,dtype='float' ,delimiter='\t' ,skiprows=1) 9 10 x_txt = data[:,0] 11 y_txt = data[:,3] 12 plt.plot(x_txt,y_txt) 13 14plt.show()

4つ適当なテキストデータを置いて上記コードを実行した結果が以下になります。
イメージ説明

投稿2016/09/18 02:00

編集2016/09/19 22:41
cesolution

総合スコア217

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

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

vegasapo

2016/09/18 15:03

ファイルの数が非常に多いため、その方法は厳しいです。 すみませんがよろしくお願い致します。
cesolution

2016/09/19 22:35

vegasapo様 了解しました。 figuresizeの指定が上手くできていませんが、以下でいかがでしょうか? for filename in os.listdir(target_dir): path_in = os.path.join(target_dir, filename) if not (os.path.isfile(path_in) and path_in.endswith('.txt')): continue fp = codecs.open(path_in, encoding='cp932', errors='ignore') data = np.loadtxt(fp, comments='#' ,dtype='float' ,delimiter='\t' ,skiprows=1) x_txt = data[:,0] y_txt = data[:,3] plt.plot(x_txt,y_txt) plt.show()
vegasapo

2016/09/20 01:45

ありがとうございます。 おかげさまで上手くいきました。 今後もわからないことがあった際は、よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問