python-如何在matplotlib中更新3D箭头动画
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-如何在matplotlib中更新3D箭头动画,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1839字,纯文字阅读大概需要3分钟。
内容图文
![python-如何在matplotlib中更新3D箭头动画](/upload/InfoBanner/zyjiaocheng/693/7f291ce77ccb4d8492d874e8e50d7787.jpg)
我正在尝试使用matplotlib在python中重现this animation的左侧图.
我可以使用3D颤动功能生成矢量箭头,但是作为I read here,似乎无法设置箭头的长度.因此,我的情节看起来不太正确:
因此,问题是:如何生成许多不同长度的3D箭头?重要的是,我是否可以通过这种方式生成它们,以便可以轻松地为动画的每一帧进行修改?
到目前为止,这是我的代码,使用不太理想的3D颤动方法:
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d
ax1 = plt.subplot(111,projection='3d')
t = np.linspace(0,10,40)
y = np.sin(t)
z = np.sin(t)
line, = ax1.plot(t,y,z,color='r',lw=2)
ax1.quiver(t,y,z, t*0,y,z)
plt.show()
解决方法:
正如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箭袋中的箭头长度标准化.
内容总结
以上是互联网集市为您收集整理的python-如何在matplotlib中更新3D箭头动画全部内容,希望文章能够帮你解决python-如何在matplotlib中更新3D箭头动画所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。