更新 3d matplotlib 中绘图的颜色
Update colour of plot in 3d matplotlib
我想创建一个 3D 动画散点图,其中最新的点以某种颜色显示,然后变灰,直至生成下一个点。
输入文件 'coordinates.txt' 仅在三列中包含 x、y 和 z 值。
只要我跳过 z 值并只使用 2d 投影,代码就可以工作。当我添加 z 坐标时,我得到 TypeError: object of type 'float' has no len()
.
我不明白为什么我在 3d 投影中出现此错误,但在 2d 投影中却没有,以及为什么它要在 3d 版本中计算 len()。
如果有人能帮我解决这个问题,我会很高兴!
input_file = open('coordinates.txt', 'r').readlines()
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
pylab.xlim([0,6])
pylab.ylim([0,6])
ax.set_zlim([0,6])
line = None
def main(i):
global line
if line is not None:
line.set_color('gray')
line, = ax.plot(x,y,z, 'ro')
for row in input_file:
el = row.split()
x = float(el[0])
y = float(el[1])
z = float(el[2])
plt.ion()
plt.show()
ani = animation.FuncAnimation(fig, main)
plt.draw()
这里是整个回溯:
Traceback (most recent call last):
File "./def_func_3d.py", line 65, in
ani = animation.FuncAnimation(fig, main)
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 1010, in init
TimedAnimation.init(self, fig, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 864, in init
*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 545, in init
self._init_draw()
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 1035, in _init_draw
self._draw_frame(next(self.new_frame_seq()))
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 1049, in _draw_frame
self._drawn_artists = self._func(framedata, *self._args)
File "./def_func_3d.py", line 43, in main
line, = ax.plot(x,y,z, 'ro')
File "/usr/lib/pymodules/python2.7/mpl_toolkits/mplot3d/axes3d.py", line 1511, in plot
zs = np.ones(len(xs)) * zs
TypeError: object of type 'float' has no len()
plot
期望 x
和 y
的可迭代对象,如果它是标量,它会使用它来调整 z
的大小。代码改成
应该没问题
line, = ax.plot([x], [y], z, 'ro')
我想创建一个 3D 动画散点图,其中最新的点以某种颜色显示,然后变灰,直至生成下一个点。
输入文件 'coordinates.txt' 仅在三列中包含 x、y 和 z 值。
只要我跳过 z 值并只使用 2d 投影,代码就可以工作。当我添加 z 坐标时,我得到 TypeError: object of type 'float' has no len()
.
我不明白为什么我在 3d 投影中出现此错误,但在 2d 投影中却没有,以及为什么它要在 3d 版本中计算 len()。
如果有人能帮我解决这个问题,我会很高兴!
input_file = open('coordinates.txt', 'r').readlines()
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
pylab.xlim([0,6])
pylab.ylim([0,6])
ax.set_zlim([0,6])
line = None
def main(i):
global line
if line is not None:
line.set_color('gray')
line, = ax.plot(x,y,z, 'ro')
for row in input_file:
el = row.split()
x = float(el[0])
y = float(el[1])
z = float(el[2])
plt.ion()
plt.show()
ani = animation.FuncAnimation(fig, main)
plt.draw()
这里是整个回溯:
Traceback (most recent call last):
File "./def_func_3d.py", line 65, in
ani = animation.FuncAnimation(fig, main)
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 1010, in init
TimedAnimation.init(self, fig, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 864, in init
*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 545, in init
self._init_draw()
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 1035, in _init_draw
self._draw_frame(next(self.new_frame_seq()))
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 1049, in _draw_frame
self._drawn_artists = self._func(framedata, *self._args)
File "./def_func_3d.py", line 43, in main
line, = ax.plot(x,y,z, 'ro')
File "/usr/lib/pymodules/python2.7/mpl_toolkits/mplot3d/axes3d.py", line 1511, in plot
zs = np.ones(len(xs)) * zs
TypeError: object of type 'float' has no len()
plot
期望 x
和 y
的可迭代对象,如果它是标量,它会使用它来调整 z
的大小。代码改成
line, = ax.plot([x], [y], z, 'ro')