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

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

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

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

NumPy

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

Python 3.x

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

Python

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

Q&A

1回答

4309閲覧

pythonにおけるリアルタイムなグラフ描画

2c8rlc

総合スコア10

Matplotlib

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

NumPy

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

Python 3.x

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

Python

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

0グッド

1クリップ

投稿2018/10/02 05:10

前提・実現したいこと

白背景上に黒点を生成し、黒点がそれぞれの速度を持って動いているようにみえるプログラムにおいて
動いた黒点が任意の座標を通過した回数を折れ線グラフでリアルタイムに描画したい

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

前半部分の白背景上に黒点を生成し、動いているようなプログラムを作成したのですが
後半部分のグラフを描画する方法が分かりません。
いい方法がありましたら教えて頂けると幸いです。

該当のソースコード

Python3

1import numpy as np 2import cv2 3import random 4 5x = 1000 6y = 1000 7 8def random1(): 9 10 index = random.randrange(0, 999) # 点のx軸座標を生成 11 speed = random.randrange(-3,3) # 個々の点の速度(≠0)を生成 12 while speed == 0: 13 speed = random.randrange(-3, 3) 14 15 return index,speed 16 17if __name__=='__main__': 18 array = np.full((x,y,3),255,dtype="uint8") #1000x1000 背景白画像の配列 19 20 b = [] #個々の黒点のx軸座標を格納 21 speedlist = [] #個々の黒点が動く速度を格納 22 for i in range(1000): 23 #ランダムな座標に黒点を1000個生成(大きさ3x3) 24 index,speed = random1() 25 for j in range(-1,2): 26 if 0 <= index + j < 1000: 27 for k in range(-1, 2): 28 if 0 <= i + k < 1000: 29 array[i + k, index + j] = 0 30 31 b.append(index) 32 speedlist.append(speed) 33 34  #生成した黒点を白く塗りつぶし、その隣を黒く塗り個々の速度で動いたようにみせる 35 for i in range(1000): 36 for j in range(1000): 37 for k in range(-1, 2): 38 if 0 <= j + k < 1000: 39 for l in range(-1, 2): 40 if 0 <= b[j] + l < 1000: 41 array[j + k , b[j] + l] = 255 42 b[j] += speedlist[j] 43    #画面外に黒点が消えた場合、新たに点を作成 44 if b[j] <= -2 or b[j] >= 1001 : 45 index,speed = random1() 46 47 b[j] = index 48 speedlist[j] = speed 49 50 for l in range(-1,2): 51 if 0 <= b[j] + l < 999: 52 for m in range(-1,2): 53 if 0 <= j + m < 999: 54 array[ j + m, b[j] + l ]= 0 55 56 57 cv2.imshow("people",array) 58 cv2.waitKey(100)

試したこと

検索するとmatplotlibでリアルタイムにグラフが描画できるようなのですが、
経過時間をx軸、通過回数をy軸にする方法が分からず・・・・・・

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

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

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

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

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

guest

回答1

0

ランダムウォークのようなことをしたいのでしょうか?
アニメーショングラフの作成は animation.ArtistAnimation でできます。
使い方はこちらの回答 を参考にしてください。

サンプルコード

python

1import matplotlib.pyplot as plt 2import numpy as np 3from matplotlib.animation import ArtistAnimation 4from matplotlib.patches import Rectangle 5 6size = 30 # セルのサイズ 7num_points = 20 # 点の数 8 9# 初期点の数 10points = np.random.randint(0, size, (num_points, 2)) 11 12fig, [axes1, axes2] = plt.subplots(1, 2, figsize=(8, 4)) 13 14# グリッド 15axes1.grid(which='minor', color='b', linestyle='-', linewidth=1) 16# x、y 軸の目盛りのラベル 17axes1.set_xticks(np.arange(0, size, 1)) 18axes1.set_yticks(np.arange(0, size, 1)) 19axes1.set_xticklabels(np.arange(size)) 20axes1.set_yticklabels(np.arange(size)) 21# x、y 軸の目盛りの位置 22axes1.set_xticks(np.arange(-.5, size, 1), minor=True) 23axes1.set_yticks(np.arange(-.5, size, 1), minor=True) 24 25frames = [] # 各フレームを構成する Artist 一覧 26data = [] # カウント用 27 28for i in range(20): 29 # 移動する。 30 points += np.random.randint(-1, 1, (num_points, 2)) 31 # 範囲外に出たら、RPG 風に反対側に行く。 32 points = np.where(points == size, 0, points) 33 points = np.where(points == -1, size - 1, points) 34 # 点を黒く塗り潰す。 35 img = np.full((size, size, 3), 255) 36 img[tuple(zip(*points))] = 0 37 # 特定の範囲にある点の数を数える 38 count = (np.all((10 <= points) & (points <= 20), axis=1)).sum() 39 data.append(count) 40 41 # 画像を描画する。 42 artists1 = axes1.imshow(img, origin='lower') 43 # 折れ線を描画する。 44 artists2 = axes2.plot(data) 45 # 長方形を描画する。 46 artists3 = axes1.add_patch( 47 Rectangle((9.5, 9.5), 10, 10, linewidth=3, edgecolor='r', facecolor='none')) 48 49 frame = [artists1] + [artists3] + artists2 50 frames.append(frame) 51 52# アニメーションを作成する。 53anim = ArtistAnimation(fig, frames, interval=500) 54# gif 画像として保存する。 55anim.save('animation.gif', writer='imagemagick') 56# Figure を表示する。 57fig.show()

イメージ説明

投稿2018/10/02 12:23

tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問