📜  如何在循环期间更新同一图形上的绘图?

📅  最后修改于: 2022-05-13 01:55:27.398000             🧑  作者: Mango

如何在循环期间更新同一图形上的绘图?

我们可以使用 matplotlib 在循环期间的每次迭代中更新绘图。在matplotlib.pyplot.draw()的帮助下 函数,我们可以在循环期间更新同一图上的图。

使用 matplotlib.pyplot.draw():用于更新已更改的图形。它将重绘当前图形。

在此之前我们使用figure.ion()函数 运行 GUI 事件循环。如果不使用figure.ion(),我们可能无法看到 GUI 图。

方法:

在给定的示例中,首先我们将导入我们将要使用的所有必要的库。然后创建XY。X保存从 0 到 10 的值,这些值均匀分布为 100 个值。例如,我们正在创建从 2 到 3 的值,其中包含 5 个均匀间隔的值 (np.linspace(2, 3, 5)) 它应该像从 2 到 3 个均匀间隔的数组([2 , 2.25, 2.5 , 2.75, 3])。之后,我们使用plt.ion()函数初始化 GUI,现在我们必须创建一个子图,以便我们可以绘制X 和 Y值。之后,我们运行一个 for 循环直到一些迭代并创建一个 new_y 值来保存我们的更新值,然后我们使用set_xdata()set_ydata()更新X 和 Y的值。 canvas.draw()将绘制更新的值, canvas.flush_events()保存 GUI 事件,直到处理完 UI 事件。这将一直运行到循环结束并且值将不断更新。



代码:

Python3
# importing libraries
import numpy as np
import time
import matplotlib.pyplot as plt
 
# creating initial data values
# of x and y
x = np.linspace(0, 10, 100)
y = np.sin(x)
 
# to run GUI event loop
plt.ion()
 
# here we are creating sub plots
figure, ax = plt.subplots(figsize=(10, 8))
line1, = ax.plot(x, y)
 
# setting title
plt.title("Geeks For Geeks", fontsize=20)
 
# setting x-axis label and y-axis label
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
 
# Loop
for _ in range(50):
    # creating new Y values
    new_y = np.sin(x-0.5*_)
 
    # updating data values
    line1.set_xdata(x)
    line1.set_ydata(new_y)
 
    # drawing updated values
    figure.canvas.draw()
 
    # This will run the GUI event
    # loop until all UI events
    # currently waiting have been processed
    figure.canvas.flush_events()
 
    time.sleep(0.1)


Python3
from math import pi
import matplotlib.pyplot as plt
import numpy as np
import time
 
# generating random data values
x = np.linspace(1, 1000, 5000)
y = np.random.randint(1, 1000, 5000)
 
# enable interactive mode
plt.ion()
 
# creating subplot and figure
fig = plt.figure()
ax = fig.add_subplot(111)
line1, = ax.plot(x, y)
 
# setting labels
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.title("Updating plot...")
 
# looping
for _ in range(50):
   
    # updating the value of x and y
    line1.set_xdata(x*_)
    line1.set_ydata(y)
 
    # re-drawing the figure
    fig.canvas.draw()
     
    # to flush the GUI events
    fig.canvas.flush_events()
    time.sleep(0.1)


输出:

更新情节

这里, figure.canvas.flush_events()用于在绘制更新的图形之前清除旧图形。

示例 2:在此示例代码中,我们使用set_xdata()在循环中更新 y 的值,并每次使用 canvas.draw() 重新绘制图形。

蟒蛇3

from math import pi
import matplotlib.pyplot as plt
import numpy as np
import time
 
# generating random data values
x = np.linspace(1, 1000, 5000)
y = np.random.randint(1, 1000, 5000)
 
# enable interactive mode
plt.ion()
 
# creating subplot and figure
fig = plt.figure()
ax = fig.add_subplot(111)
line1, = ax.plot(x, y)
 
# setting labels
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.title("Updating plot...")
 
# looping
for _ in range(50):
   
    # updating the value of x and y
    line1.set_xdata(x*_)
    line1.set_ydata(y)
 
    # re-drawing the figure
    fig.canvas.draw()
     
    # to flush the GUI events
    fig.canvas.flush_events()
    time.sleep(0.1)

输出:

更新剧情。