4

(x0, y0)while ループを使用して、特定の値の間でランダムなポイントを生成する簡単なコードを作成しました。各点の座標が設定された後、その点は while ループの最後に表示される空のグラフに描画されます。

ただし、matplotlib を使用してアニメーションを設定したいと思います。これにより、最初のグラフと、コードが計算しているときにポイントが徐々に追加されるのを確認できます。私はいくつかの例を探しましたが、私が見つけたものは主に波などに関係しており、少し異なるアプローチが必要だと思います.

これは基本的なコードです:

from numpy import *
from pylab import *
import random

figure(figsize=(8,6), dpi=150)
x = np.linspace(-1, 4.5, 250)

h=5
a=0.5
b=4

ylim(-0.5,5.5)
xlim(-1,5.0)

i= 0

while i< 500:
    R1 = random.random()
    R2 = random.random()
    x0 = (b - a)*R1 + a
    y0 = h*R2
    scatter(x0, y0, 10, color="red")
    i = i + 1

show()  

ご協力いただきありがとうございます!

編集:アニメーションコード

import numpy as np
import matplotlib.pyplot as plt
from pylab import *
import matplotlib.animation as animation
import random

fig = plt.figure(figsize=(8,6), dpi=150)
x = np.linspace(-2, 4.5, 250)


h=4
a=1
b=3

hlines(y=h, xmin=1, xmax=3, linewidth=1.5)
vlines(x=a, ymin=0, ymax=4, linewidth=1.5)
vlines(x=b, ymin=0, ymax=4, linewidth=1.5)

ylim(-2.5,10.5)
xlim(-2.5,4.5)
grid()

def data_gen():
    i = 0
    while i< 1:
        R1 = random.random()
        R2 = random.random()
        x0 = (b - a)*R1 + a
        y0 = h*R2
        i = i + 1
        yield x0, y0


line, = plot([], [], linestyle='none', marker='o', color='r')

ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

xdata, ydata = [], []

def run(data):
    x0,y0 = data
    xdata.append(x0)
    ydata.append(y0)
    line.set_data(xdata, ydata)

    return line,

ani = animation.FuncAnimation(fig, run, data_gen, blit=True, interval=0.5,
    repeat=False)
plt.show()
4

1 に答える 1

0

これがまさにあなたが探しているものかどうかはわかりません。いずれにせよ、run関数内でランダムな点を生成し、そこにプロットできます。blit = Trueあるフレームから別のフレームへの軸をクリアする必要もクリアする必要もありません。
これが私のコードです:

from pylab import *
from matplotlib.animation import FuncAnimation
import random

fig = plt.figure(figsize=(8,6), dpi=150)
x = np.linspace(-2, 4.5, 250)

h=4
a=1
b=3

hlines(y=h, xmin=a, xmax=b, linewidth=1.5)
vlines(x=a, ymin=0, ymax=h, linewidth=1.5)
vlines(x=b, ymin=0, ymax=h, linewidth=1.5)

ylim(-2.5,10.5)
xlim(-2.5,4.5)
grid()

ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

def run(i):
        R1 = random.random()
        R2 = random.random()
        x0 = (b - a)*R1 + a
        y0 = h*R2
        ax.scatter(x0, y0, 10, color='red')

ani = FuncAnimation(fig = fig, func = run, frames = 500, interval = 10, repeat = False)
plt.show()

このアニメーションを生成します:

ここに画像の説明を入力

(2 MB 未満の軽いファイルを取得するために、このアニメーションを 100 ポイントにカットしました。上記のコードは、500 ポイントのアニメーションを生成します)

于 2020-07-20T18:30:10.920 に答える