正如Azad所建议的那样,一个不大但有效的解决方案是简单地编辑mpl_toolkits / mplot3d / axes3d.py以删除标准化.因为我不想弄乱我的实际matplotlib安装,所以我只是将axes3d.py文件复制到其他脚本所在的目录中,并修改了该行
norm = math.sqrt(u ** 2 + v ** 2 + w ** 2)
至
norm = 1
(请确保更改正确的行.“ norm”的另一种用法是高出几行.)此外,为了使axes3d.py在mpl目录之外时能够正常运行,我更改了
from . import art3d
from . import proj3d
from . import axis3d
至
from mpl_toolkits.mplot3d import art3d
from mpl_toolkits.mplot3d import proj3d
from mpl_toolkits.mplot3d import axis3d
这是我能够生成的漂亮动画(不确定颜色出了什么问题,在上传到SO之前看起来还不错).
以及生成动画的代码:
import numpy as np
import matplotlib.pyplot as plt
import axes3d_hacked
ax1 = plt.subplot(111,projection='3d')
plt.ion()
plt.show()
t = np.linspace(0,10,40)
for index,delay in enumerate(np.linspace(0,1,20)):
y = np.sin(t+delay)
z = np.sin(t+delay)
if delay > 0:
line.remove()
ax1.collections.remove(linecol)
line, = ax1.plot(t,y,z,color='r',lw=2)
linecol = ax1.quiver(t,y,z, t*0,y,z)
plt.savefig('images/Frame%03i.gif'%index)
plt.draw()
plt.ioff()
plt.show()
现在,如果我只能让那些箭头看起来更漂亮,并且头部充满魅力.但这是一个单独的问题…
编辑:将来,根据此pull request,matplotlib不会自动将3D箭袋中的箭头长度标准化.