在循环的每个遍历中显示子图

时间:2019-11-30 23:52:46

标签: python matplotlib

我实质上想执行以下操作:

import matplotlib.pyplot as plt
import numpy as np

fig1, ax1 = plt.subplots()
fig2, ax2 = plt.subplots()

for i in range(10):

    ax1.scatter(i, np.sqrt(i))
    ax1.show() # something equivalent to this

    ax2.scatter(i, i**2)

也就是说,每次在ax1上绘制一个点时,都会显示该点-ax2仅显示一次。

2 个答案:

答案 0 :(得分:0)

您不能仅显示轴。轴始终是图形的一部分。对于动画,您需要使用交互式后端。然后,jupyter笔记本中的代码可能看起来像

%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation


fig1, ax1 = plt.subplots()
fig2, ax2 = plt.subplots()

frames = 10
x = np.arange(frames)
line1, = ax1.plot([],[], ls="", marker="o")
line2, = ax2.plot(x, x**2, ls="", marker="o")
ax2.set_visible(False)



def animate(i):
    line1.set_data(x[:i], np.sqrt(x[:i]))
    ax1.set_title(f"{i}")
    ax1.relim()
    ax1.autoscale_view()
    if i==frames-1:
        ax2.set_visible(True)
        fig2.canvas.draw_idle()

ani = FuncAnimation(fig1, animate, frames=frames, repeat=False)

plt.show()

答案 1 :(得分:0)

如果您想动态更改图,建议您不要每次都重新绘制整个图,这将导致动作缓慢。相反,您可以使用Blit来执行此操作。我在以前的项目中使用过它。如果只是从中获取所需的部分,也许它也可以为您提供帮助:

Python project dynamically updating plot