在 Python 中绘制三个轴的对数螺线

Drawing a logarithmic spiral in three axes in Python

我尝试在三个轴上以 spring 的形式绘制对数螺线。 使用参数方程:

x=a*exp(b*th)*cos(th)
y=a*exp(b*th)*sin(th)

使用代码:

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
from math import exp,sin,cos
from pylab import *

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
n=100
a=0.5
b=0.20
th=np.linspace(0, 500, 10000)
x=a*exp(b*th)*cos(th)
y=a*exp(b*th)*sin(th)
ax.plot(x, y)
ax.legend()

plt.show()

我得到:

但是,我想沿着 Z axis 拉伸螺旋以获得类似于以下的结果,但使用对数螺旋作为基础:

你怎么做到的?如何通过向 Z axis 添加条件来修改函数?

选择哪个z有点取决于你。从情节本身很难说,但我的猜测是它是线性的(最简单的选择)。

使用你的代码并添加 z 轴你可以做这样的事情

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
from math import exp,sin,cos
from pylab import *

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
a=0.05
b=0.10
# took the liberty of reducing the max value for th 
# as it was giving you values of the order of e42
th=np.linspace(0, 50, 10000)  
x=a*exp(b*th)*cos(th)
y=a*exp(b*th)*sin(th)
z=np.linspace(0,2, 10000)  # creating the z array with the same length as th
ax.plot(x, y, z)  # adding z as an argument for the plot
ax.legend()

plt.show()

您可以使用 ab 参数来获得您想要的椭圆形状。您还可以玩弄 z 的定义,使其呈指数增长,或呈对数增长......或其他完全不同的东西。

顺便说一句,您的导入有点多余,一个包中的某些功能可能被另一个包遮盖了。

由于 95% 的螺旋点都集中在绘图中间的一个点上,因此将绘图范围限制在

这样的范围内是有意义的
th=np.linspace(475, 500, 10000)

然后使用 z 值的线性范围将直接在图中给出所需的曲线,只需在绘图函数中指定该范围,plot(x,y,z)

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')

a=0.5
b=0.20
th=np.linspace(475, 500, 10000)
x=a*np.exp(b*th)*np.cos(th)
y=a*np.exp(b*th)*np.sin(th)
z = np.linspace(0,2, len(th))
ax.plot(x, y, z)
#ax.legend()

plt.show()

请注意,我在这里清理了导入。例如。如果您从 math 导入 cos 但稍后将所有内容 (*) 从 pylab 导入命名空间,则使用的函数 cos 是 numpy cos 函数,而不是数学中的那个(数学 cos 函数在这里无论如何都不起作用)。一般来说:根本不要使用 pylab。