在用Python绘制罗斯勒系统的三维相图时,我遇到了一个特殊的问题,问题是某些箭头太长了,因此可视化效果并不好:Bad 3d phase portrait到目前为止,这是我的代码,我真的不知道要修改什么才能做出合适的绘图。任何帮助都将不胜感激。
# Axes, grid
fig = plt.figure(figsize=(10, 10))
ax = plt.axes(projection ='3d')
x, y, z = np.meshgrid(np.arange(-20, 20, 4),
np.arange(-20, 20, 4),
np.arange(0, 20, 4))
# Define vector field
u = -y - z
v = x + (1/5)*y
w = 1/5 + (x - 5/2)*z
# Plot vector field
ax.quiver(x, y, z, u, v, w, length=0.1, normalize = False)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
我还没有能够尝试任何替代方案,主要是因为我真的不知道该怎么做。
1条答案
按热度按时间628mspwn1#
我相信你不可能用抖动来精确地可视化这个矢量场,因为在你的视野范围内有相当大的幅度变化。一个更好的方法是可视化流线,但这也不容易:
1.我相信最简单的解决方案是使用SymPy Plotting Backend module,它公开了一个
plot_vector
函数,也可以绘制流线。注意,我是这个模块的开发者,所以我将为你展示它。特别是,这个模块公开了一个后端,可以使用K3D-Jupyter创建绘图,对于这个特定的矢量场,它可以产生很好的结果。为了使用Streamline功能,您将必须安装所有的需求,这些需求相当繁重(如果我没记错的话,至少有200MB)。