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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

567閲覧

python:jupyter notebookにてCSVファイルを結合してグラフ描画について

bkts94441

総合スコア18

Matplotlib

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2017/11/07 08:26

編集2017/11/08 06:13

#目的
python jupyternotebookにて、読み込んだ複数のCSVファイルを1つのグラフにまとめて描画したいです。

#問題点
下記のプログラムで出力するとグラフの値の数値が異常な数値になります。また、グラフの線の色が一色になり大変見づらいです。

#解決してほしいこと
CSVファイルを読み込んだ際の異常数値の排除、グラフの線を多色化させたいです。
#ソースコード

import matplotlib.pyplot as plt import pandas as pd import numpy as np import os import glob import sys def GraphSortOverlap(): files = glob.glob("./*/data/target.csv")#*は日付ファイル N = len(files) list =[] for idx, file in enumerate(files): # FILE毎にUNIQUEなLABELを追加 df = pd.read_csv(file) df['label'] = idx list.append(df) df = pd.concat(list) # LABEL 0~(N-1) に対応したColorリストを生成 colors = plt.cm.jet(np.linspace(0,1,N)) ax = plt.subplot() # LABEL毎にグラフを描写 for l in range(N): df[df['label']==l].plot(x='freq', y='amp', label=l, c=colors[l], ax=ax) #plt.legend(file.split(os.sep)[-3]) #日付ファイルのラベル表記 ax.grid(True) plt.ylim([0,250]) plt.tight_layout() plt.show() GraphSortOverlap()

#実行結果
こちらが複数のデータで正常の出力です。
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな感じでどうでしょうか

修正点は

  1. ファイル毎にユニークな 'label' column の追加
  2. colormap('jet')より 上記のラベルに対応したカラーリストを生成
  3. グラフを上記の'label'毎にループ処理で描写(同じ subplot を指定)
  4. グラフ描写の際に 2.で生成したカラーリストを使用。

です。

Python

1import matplotlib.pyplot as plt 2import pandas as pd 3import numpy as np 4import os 5import glob 6import sys 7 8def GraphSortOverlap(): 9 files = glob.glob("./target.csv") 10 N = len(files) 11 list =[] 12 for idx, file in enumerate(files): 13 # FILE毎にUNIQUEなLABELを追加 14 df = pd.read_csv(file) 15 df['label'] = idx 16 list.append(df) 17 df = pd.concat(list) 18 19 # LABEL 0~(N-1) に対応したColorリストを生成 20 colors = plt.cm.jet(np.linspace(0,1,N)) 21 22 ax = plt.subplot() 23 # LABEL毎にグラフを描写 24 for l in range(N): 25 df[df['label']==l].plot(x='row', y='col', label=l, c=colors[l], ax=ax) 26 ax.grid(True) 27 plt.tight_layout() 28 plt.show()

投稿2017/11/08 01:10

magichan

総合スコア15898

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

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

bkts94441

2017/11/08 06:03

ご回答ありがとうございます。無事に希望通りのグラフが出力されました。しかし、ラベルの表記を1枚目の画像のタイトルのように日付を加えたいのですが、plt.legend関数を書いても日付ラベルの処理がされませんでした。どのように書けば日付のラベル表記が出来ますでしょうか。引き続きご回答の方をよろしくお願い致します。また、ソースコードを更新します。
magichan

2017/11/08 06:29

各ファイル毎のグラフの描写は df[df['label']==l].plot(x='row', y='col', label=l, c=colors[l], ax=ax) のようになっており、現状では引数にて "label=l" と数字を渡しております。 この部分を "label='2017/11/08'" のようにファイルに応じた文字列を渡すように修正してみると良いかと思います。
bkts94441

2017/11/08 23:54

ありがとうございました。無事問題を解決することが出来ました。また質問がある時はよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問