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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

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

Python

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

Q&A

解決済

3回答

761閲覧

ランダムウォークの(ステップ数、確率)のリアルタイム表示について

Fallout_18

総合スコア124

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/03/02 15:57

編集2018/03/02 16:01

前提・実現したいこと

python初心者です!
簡単なランダムウォークについてのプログラムの練習をしています。
step数と各位置(P,Q,R)にいる確率のリアルタイムグラフを作りたいです。

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

while 分の中に、plt.plot(N, P)としたときに、グラフが出てくるのですが、縦軸、横軸だけでてきて、グラフが表示されない上に、20枚程出てきます。

該当のソースコード

python

1import sympy as sym 2import matplotlib.pyplot as plt 3from sympy import* 4 5#定数の定義(1stepのとき) 6N = 1 7P = 0 8Q = sym.Rational(1, 6) 9R = 0 10#自分で持ってきた変数の定義 11p,q,r,Pn,Qn,Rn=symbols("p,q,r,Pn,Qn,Rn") 12#n回目のそれぞれの確率 13Pn = sym.Rational(3, 2)*q 14Qn = p/6 + q/2 + r/2 15Rn = q/2 16while N<20: 17 N +=1 18 Pstep = Pn.subs([(q, Q)]) #qにQを代入 19 Qstep = Qn.subs([(p,P),(q,Q),(r,R)]) 20 Rstep = Rn.subs([(q, Q)]) 21 P=Pstep 22 Q=Qstep 23 R=Rstep 24 25plt.plot(N,P) 26plt.show()

試したこと

調べてみると、show()だと、プログラムを終わらせてしまうことだけは理解したので、show()ではない何かが必要なはず。。。。
よろしくお願いいたします。

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

while分の中身に、エラーはありません。
最後のplt.show()をどのようにすれば、リアルタイム表示になるかということです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

  • マーカーが設定されていないので点が見えないこと
  • 途中の描画結果を表示させるのにpauseを使うか、animationにするかが必要

お手軽な修正で済ませる方法

python

1while N<20: 2 ... 3 plt.plot(N,P, "ro") 4 plt.pause(1)

Animationにする方法

Python

1import sympy as sym 2from sympy import* 3import matplotlib.pyplot as plt 4from matplotlib.animation import FuncAnimation 5 6fig, ax = plt.subplots() 7xdata, ydata = [], [] 8ln, = plt.plot([], [], 'r-o', animated=True) 9 10#定数の定義(1stepのとき) 11N = 1 12P = 0 13Q = sym.Rational(1, 6) 14R = 0 15#自分で持ってきた変数の定義 16p,q,r,Pn,Qn,Rn=symbols("p,q,r,Pn,Qn,Rn") 17#n回目のそれぞれの確率 18Pn = sym.Rational(3, 2)*q 19Qn = p/6 + q/2 + r/2 20Rn = q/2 21 22MAX_ITER = 20 23 24def init(): 25 ax.set_xticks(range(5, MAX_ITER+1, 5)) 26 ax.grid('on') 27 ax.set_xlim(1, MAX_ITER) 28 ax.set_ylim(0, 0.3) 29 return ln, 30 31def update(frame): 32 global P, Q, R 33 Pstep = Pn.subs([(q, Q)]) #qにQを代入 34 Qstep = Qn.subs([(p,P),(q,Q),(r,R)]) 35 Rstep = Rn.subs([(q, Q)]) 36 P=Pstep 37 Q=Qstep 38 R=Rstep 39 40 xdata.append(frame) 41 ydata.append(P) 42 ln.set_data(xdata, ydata) 43 return ln, 44 45ani = FuncAnimation(fig, update, frames=range(1, MAX_ITER+1), 46 init_func=init, blit=True, repeat=False) 47plt.show()

https://matplotlib.org/api/animation_api.html
https://matplotlib.org/examples/animation/index.html

投稿2018/03/02 23:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Fallout_18

2018/03/03 13:57

ご親切に、お答えいただきありがとうございます!
guest

0

リアルタイム表示 matplotlib
で検索すると色々出てきましたよ

pause()を使うといいらしいです

これからはgoogleなりで関連ワードを調べるようにするといいと思います

投稿2018/03/02 16:14

giit

総合スコア91

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

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

Fallout_18

2018/03/03 13:58

そうですね、githubとかいろいろありますね。
guest

0

すこしだけプログラムを変更してみました。
なぜ、点が表示されないかは、ご自身で調査、対応してみてください。

python

1import sympy as sym 2import matplotlib.pyplot as plt 3from sympy import* 4 5N = 1 6P = 0 7Q = sym.Rational(1, 6) 8R = 0 9 10p, q, r, Pn, Qn, Rn = symbols("p, q, r, Pn, Qn, Rn") 11 12Pn = sym.Rational(3, 2) * q 13Qn = p / 6 + q / 2 + r / 2 14Rn = q / 2 15while N < 10: 16 N += 1 17 Pstep = Pn.subs([(q, Q)]) 18 Qstep = Qn.subs([(p,P),(q,Q),(r,R)]) 19 Rstep = Rn.subs([(q, Q)]) 20 P = Pstep 21 Q = Qstep 22 R = Rstep 23 24 plt.plot(N, P) 25 print(str(N) + ",P=" + str(float(P))+",Q=" + str(float(Q)) + ",R=" + str(float(R))) 26 plt.pause(0.1) 27 28plt.show() 29

イメージ説明説明説明](01e63439cebfff2faa15df91174e016e.png)説明](c9ab9bfe5ce8a7337e65bbf7e345bc5a.png)](ca6e91a2ce2a264a31612b7167bceb0c.png)

投稿2018/03/02 23:47

編集2018/03/02 23:51
katoy

総合スコア22324

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

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

Fallout_18

2018/03/03 13:57

ありがとうございます!
Fallout_18

2018/03/03 14:53

解決しました。 確率、P,Q,Rはそれぞれの確率(p,q,r)の関数なので、この場合、Pだけだと、値は持たないことになったまま終了してしまうということで理解しました。 グラフは出せました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問