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

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

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

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

Python 3.x

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

Python

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

Q&A

解決済

2回答

1550閲覧

同スクリプト内での2番目以降の極座標グラフの表示

nobuwara

総合スコア6

Matplotlib

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/01/30 15:40

前提・実現したいこと

(プログラム歴は1年未満の初心者以上、初級者以下です。)
Pythonである何十万行とあるログデータから、指定した日付、製品名で数百行のデータを取り出して極座標グラフを描画しました。
データは多重リストで格納し下記のようにし,下記のようにmatplotlibで定義した関数を描写しました。
例) data=[['a':[1,2,3,4,5,.....]], ['b':[1,2,3,4,5......]], ['c':[1,2,3,4,5.......]]]

Python

1def Graph(): 2 for d in range(len(data)): 3   ax.plot(t,data[d][1],label=data[d][0]) 4 ax.legend(loc='upper right',bbox_to_anchor=(1.3,0.9,0.5,0.100),borderaxespad=0.) 5 plt.show()

1個目は意図したとおり動作します。その後、同じスクリプト内で上記データリストの中で取り出したいデータをリストの前から(グラフで見た時は上から)何番目かを番号で指定して、そのデータだけを描写するグラフを下記のように作りました。

Python

1num=int(input()) 2ax.plot(t,data[num][1],label=data[num][0]) 3ax.legend(loc='upper right',bbox_to_anchor=(1.3,0.9,0.5,0.100),borderaxespad=0.) 4plt.show()

これを行っても何も描写されず、エラーも起きずプログラムが終了します。

同様に別の目的として同じスクリプト内にリストをリセットして別製品のグラフを描写しようとしても何もグラフが出てきません。
しかしプログラムが終了した後、変数(data)の中身を確認すると、問題なく新しい別の製品のデータに変わっていることを確認しましたが、グラフが表示されません。
同様のプログラムを折れ線グラフで行った場合には問題無く2番目以降も表示されました。
2番目以降も極座標グラフが問題無く表示されるにはどうすればよろしいでしょうか?
もし何か問題があれば教えてください。

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

同じスクリプト内の2番目以降のグラフが表示されません。

該当のソースコード

Python

1import matplotlib.pyplot as plt 2import numpy as np 3 4t=[] 5for i in range(360): 6 t.append(i*360/200/180*np.pi) 7 8ax=plt.subplot(111,projection="polar") 9data=[['a':[1,2,3,4,5,.....]], ['b':[1,2,3,4,5......]], ['c':[1,2,3,4,5.......]]] 10 11def Graph(): 12 for d in range(len(data)): 13   ax.plot(t,data[d][1],label=data[d][0]) 14 ax.legend(loc='upper right',bbox_to_anchor=(1.3,0.9,0.5,0.100),borderaxespad=0.) 15 plt.show() 16 17Graph() 18 19print('If need few, type number from top.If not, type n.') 20while True: 21 ans=input() 22 if 0<int(ans)<=times: 23 ax.plot(t,data[int(ans)][1],label=data[int(ans)][0]) 24 ax.legend(loc='upper right',bbox_to_anchor=(1.3,0.9,0.5,0.100),borderaxespad=0.) 25 plt.show() 26 27 elif ans=='n': 28 break 29 else: 30 print('\nWrong Number!!')

試したこと

いくつかの環境で試しましたが結果は同じでした。
(環境:Spyder、Jupyter、Idleなど。Windows と Mac両方。)

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

・Windows 7
・Python 3.6.3
・(エディター)spyder or jupyter

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

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

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

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

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

guest

回答2

0

ax=plt.subplot(111,projection="polar")
をwhile後に追加してみてください。

またtimesはどこで定義されていますか?

投稿2018/01/31 02:00

mkgrei

総合スコア8560

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

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

nobuwara

2018/01/31 02:09

ご回答ありがとうございました。ご指摘いただきましたようにwhileの後にaxを再定義したら問題無く動作いたしました。またtimesについてですが、こちらはdataを取り出す際のデータ数に起因してました。(上記例だとa〜cでtimes=3)今回は元データから該当データを取り出す部分のスクリプトを省略してましたので、混乱させてしまい大変失礼しました。
guest

0

自己解決

ご指摘いただきましたようにwhileの後にaxを再定義したら問題無く動作いたしました。

投稿2018/01/31 02:10

nobuwara

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問