Python 三维绘图动画中的线更新
我试图在3D动画中绘制一条线。我无法删除在“更新”行中创建的绘图。问题是我总是添加新行。我看到的最好的解决方案是在函数外创建线并更新这些线的数据,但我似乎找不到一种3D打印的方法 第一次发布,只需要几个小时的python。对画布一无所知。请保持简单Python 三维绘图动画中的线更新,python,python-3.x,matplotlib,animation,plot,Python,Python 3.x,Matplotlib,Animation,Plot,我试图在3D动画中绘制一条线。我无法删除在“更新”行中创建的绘图。问题是我总是添加新行。我看到的最好的解决方案是在函数外创建线并更新这些线的数据,但我似乎找不到一种3D打印的方法 第一次发布,只需要几个小时的python。对画布一无所知。请保持简单 import matplotlib; matplotlib.use("TkAgg") import numpy as np import matplotlib.pyplot as plt import mpl_toolkits.mplot3d.axe
import matplotlib; matplotlib.use("TkAgg")
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
dotinline = 101
nframe = 7
fig = plt.figure(figsize=(16, 8))
ax = p3.Axes3D(fig)
ax.view_init(0, 90)
def init():
ax.plot([-10, 10], [0, 0], [0, 0], "k")
ax.plot([0, 0], [-10, 10], [0, 0], "k")
ax.plot([0, 0], [0, 0], [-10, 10], "k")
ax.plot([], [], [], "b")
def update_lines(index):
seg = []
x = np.linspace(-10, 10, dotinline)
power = x**(-(nframe-1)/2+index)
for i in range(len(x)-1):
a = [x[i+1], x[i]]
b = [0, 0]
c = [power[i+1], power[i]]
seg.append([a, b, c])
for data in seg:
ax.plot3D(data[0], data[1], data[2], "-b")
ax.set_xlim3d([-10, 10])
ax.set_xlabel('X')
ax.set_ylim3d([-10, 10])
ax.set_ylabel('Y')
ax.set_zlim3d([-10, 10])
ax.set_zlabel('Z')
ax.set_title('3D Test')
line_ani = animation.FuncAnimation(fig, update_lines, init_func=init, frames=nframe, interval=2000, blit=False)
plt.show()
检查此代码:
import matplotlib; matplotlib.use("TkAgg")
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
dotinline = 101
nframe = 7
fig = plt.figure(figsize=(16, 8))
ax = p3.Axes3D(fig)
ax.view_init(0, 90)
def init():
ax.plot([-10, 10], [0, 0], [0, 0], "k")
ax.plot([0, 0], [-10, 10], [0, 0], "k")
ax.plot([0, 0], [0, 0], [-10, 10], "k")
ax.plot([], [], [], "b")
def update_lines(index):
ax.cla()
init()
seg = []
x = np.linspace(-10, 10, dotinline)
power = x**(-(nframe-1)/2+index)
for i in range(len(x)-1):
a = [x[i+1], x[i]]
b = [0, 0]
c = [power[i+1], power[i]]
seg.append([a, b, c])
for data in seg:
ax.plot3D(data[0], data[1], data[2], "-b")
ax.set_xlim3d([-10, 10])
ax.set_xlabel('X')
ax.set_ylim3d([-10, 10])
ax.set_ylabel('Y')
ax.set_zlim3d([-10, 10])
ax.set_zlabel('Z')
ax.set_title('3D Test')
line_ani = animation.FuncAnimation(fig, update_lines, init_func=init, frames=nframe, interval=2000, blit=False)
plt.show()
要删除前面的行,只需添加ax.cla()
但是,这也会擦除黑线轴;因此,在
ax.cla()
之后,我再次运行init()
,以便重新绘制轴线。最后,最好移动块:
ax.set_xlim3d([-10, 10])
ax.set_xlabel('X')
ax.set_ylim3d([-10, 10])
ax.set_ylabel('Y')
ax.set_zlim3d([-10, 10])
ax.set_zlabel('Z')
ax.set_title('3D Test')
在update_lines()
函数中,以便在删除行时保留这些选项。通过这段代码,我得到了以下动画:
谢谢,每次都要重做所有的情节。简单,我喜欢。