gpt4 book ai didi

python - 使用 matplotlib 制作动画,其中点被动态添加到图形中

转载 作者:行者123 更新时间:2023-12-03 21:40:35 26 4
gpt4 key购买 nike

我写了一个简单的代码来生成随机点 (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()

最佳答案

我不知道这是否正是您要找的;在任何情况下,您都可以在 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()
产生这个动画:
enter image description here
(我将此动画剪成 100 点以获得更轻的文件,小于 2 MB;上面的代码生成了一个 500 点的动画)

关于python - 使用 matplotlib 制作动画,其中点被动态添加到图形中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16842770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com