🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Matplotlib

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

Python

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

Q&A

解決済

1回答

4720閲覧

pythonのmatplotlibでリストをグラフ化する際に要素数が多く、グラフが表示されない。

man_

総合スコア45

Matplotlib

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

Python

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

0グッド

0クリップ

投稿2020/11/23 16:33

編集2020/11/24 04:08

#1 やりたいこと
実験データが記録されたファイルから、値を取り出しグラフとして表示させたい。

#2 躓いている点
リストの要素数が25620個ほどあり、グラフが表示されない状態。

コードを以下に示す

python

1import numpy as np 2import matplotlib.pyplot as plt 3 4 5time_1 = [] 6cwnd_1 = [] 7 8#ファイルを開く。 9with open('tcpout.txt') as f: 10 lines = f.readlines() 11 12 13#テキストファイル内のグラフ化したい行を取り出す。 14l_1 = [line for line in lines if '5001 32' in line] 15 16#取り出した行より、グラフに必要な値を抽出する。 17for line in l_1: 18 line_split = line.split(" ") 19 time_1.append(line_split[0]) 20 cwnd_1.append(line_split[6]) 21 22print(len(time_1)) 23print(len(cwnd_1)) 24 25#リストのグラフ化。散布図でグラフ化したい。 26plt.title("track cwnd") 27plt.xlabel("Time") 28plt.ylabel("cwnd") 29plt.scatter(time_1,cwnd_1) 30plt.show()

#現状
上記のプログラムで、要素数が3個の場合と要素数が25620個の場合で表示されるグラフを以下に示します。上が3個の場合で、下が25620個の場合です。要素数が多いと図のようにグラフが表示されません。
表示させるにはどうしたらよいのでしょうか?
有識者の方々御助力お願いします。

イメージ説明

イメージ説明

また、値を取得するテキストファイルを貼り付けすることができなかったため、テキストファイルの中身の一部を以下に示します。
このようなデータが数万行続くファイルになります。

132.449678731 100.64.0.1:5001 100.64.0.2:60424 56 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 28960 132.451673233 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa2b72 0x6da9ed3a 11 2147483647 29056 4578 29312 132.451782187 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 31872 132.453574989 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa2b72 0x6da9f2e2 12 2147483647 31872 4496 29312 132.453611768 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa4212 0x6da9f88a 13 2147483647 34816 4662 29312 132.453665328 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 37760 132.455576619 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa4212 0x6da9fe32 14 2147483647 37760 4810 29312 132.455622855 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa58b2 0x6daa03da 15 2147483647 40576 5188 29312 132.455659654 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 43520 132.457787236 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa58b2 0x6daa0982 16 2147483647 43520 5520 29312 132.457846988 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa6f52 0x6daa0f2a 17 2147483647 46336 6086 29312 132.459445006 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa6f52 0x6daa14d2 18 2147483647 49280 6584 29312 132.459453782 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa6f52 0x6daa1a7a 19 2147483647 52224 7219 29312 132.460760400 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 55040 132.462204295 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa9142 0x6daa2022 20 2147483647 55040 7777 29312 132.462220184 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa9c92 0x6daa25ca 21 2147483647 57984 8122 29312 132.462223811 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa9c92 0x6daa2b72 22 2147483647 60928 8426 29312 132.462313259 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 63744 132.463578439 100.64.0.2:60424 100.64.0.1:5001 32 0x6daa9c92 0x6daa311a 23 2147483647 63744 8451 29312 132.463592575 100.64.0.2:60424 100.64.0.1:5001 32 0x6daab8da 0x6daa36c2 24 2147483647 66688 8643 29312 132.463620518 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 69504 132.465613391 100.64.0.2:60424 100.64.0.1:5001 32 0x6daac9d2 0x6daa3c6a 25 2147483647 69504 8812 29312 132.465684163 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 72448 132.466932161 100.64.0.2:60424 100.64.0.1:5001 32 0x6daacf7a 0x6daa4212 25 25 72448 9213 29312 132.466959202 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 78208 132.469737756 100.64.0.2:60424 100.64.0.1:5001 32 0x6daacf7a 0x6daa4d62 25 25 78208 9708 29312 132.469812266 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 84096 132.471593813 100.64.0.2:60424 100.64.0.1:5001 32 0x6daae61a 0x6daa58b2 25 25 84096 10748 29312 132.471628128 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 89856 132.476697992 100.64.0.2:60424 100.64.0.1:5001 32 0x6daaf16a 0x6daa6402 25 25 89856 11457 29312 132.476915269 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 95616 132.478702961 100.64.0.2:60424 100.64.0.1:5001 32 0x6daaf712 0x6daa6f52 25 25 95616 13205 29312 132.478762763 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 110080 132.480604904 100.64.0.2:60424 100.64.0.1:5001 32 0x6dab1902 0x6daa8b9a 25 25 110080 16157 29312 132.480715862 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 115840 132.481991792 100.64.0.2:60424 100.64.0.1:5001 32 0x6dab1eaa 0x6daa96ea 25 25 115840 16985 29312 132.482042226 100.64.0.1:5001 100.64.0.2:60424 1480 0xe4249c61 0xe4249c61 10 2147483647 29312 3939 121728

#追記
要素数が25620個の場合でも、長時間待つことで表示されるようになりました。
しかし、処理が重いことが気になります。何か処理を軽くする方法はありますでしょうか?

#プログラムの最終版

python

1import numpy as np 2import matplotlib.pyplot as plt 3 4 5time_1 = [] 6cwnd_1 = [] 7 8#ファイルを開く。 9with open('tcpout.txt') as f: 10 lines = f.readlines() 11 12 13#テキストファイル内のグラフ化したい行を取り出す。 14l_1 = [line for line in lines if '5001 32' in line] 15 16#取り出した行より、グラフに必要な値を抽出する。 17for line in l_1: 18 line_split = line.split(" ") 19 time_1.append(float(line_split[0])) 20 cwnd_1.append(int(line_split[6])) 21 22print(type(time_1[1])) 23print(type(cwnd_1[1])) 24print(len(time_1)) 25print(len(cwnd_1)) 26 27#リストのグラフ化。散布図でグラフ化したい。 28plt.title("track cwnd") 29plt.xlabel("Time") 30plt.ylabel("cwnd") 31plt.plot(time_1,cwnd_1,'.') 32#plt.scatter(time_1,cwnd_1) 33plt.show()

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

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

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

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

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

guest

回答1

0

ベストアンサー

経験上、25620個というのはそこまで多くない印象です。
要素が多いので動かないというのは考えにくいです。

例えば、

python

1plt.scatter(time_1,cwnd_1) --> plt.plot(time_1, cwnd_1, '.')

としてみる。

python

1print(type(time_1), type(cwnd_1))

で意図した型になっているか確かめる。
など見てみると良いかもしれません。

要素数が多いことが原因であるのであれば、

python

1plt.scatter(time_1[:20], cwnd_1[:20])

などで20個だけプロットすると動くはずです。
こちらも試してみてください。

投稿2020/11/24 03:24

fkubota

総合スコア42

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

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

man_

2020/11/24 03:28

fkubotaさん返信ありがとうございます。 追記に記載しましたが、長時間待てば表示されました。 何か処理を軽くする方法等がありましたら教えていただけるとありがたいです。
fkubota

2020/11/24 03:33

横軸、縦軸に用いているデータは全てintやfloatでしょうか? stringが入っていると様々な事情で遅くなることがあります。 また、scatterも遅くなることがある印象があります。 plt.plot(time_1, cwnd_1, '.') を試してみる価値はあると思います。
man_

2020/11/24 04:06

返信ありがとうございます。 データがstrだったので、floatとintに変更したところ処理が軽くなりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問