Pyplot 双纽线

Pyplot lemniscate

我想知道是否有人知道在 python 中绘制双线的更优雅的方法(欢迎使用公式或其他好主意)。我从维基百科获取了公式。但是想知道是否可以缩短公式,使它看起来更漂亮。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
alpha = 1

#plot a lemniskate

t = np.linspace(0, 2*np.pi, num=1000) # 10^3 points 

x = [alpha * np.sqrt(2)*np.cos(i) / (np.sin(i)**2+1) for i in t]

y = [alpha * np.sqrt(2)*np.cos(i)*np.sin(i) / (np.sin(i)**2+1) for i in t]

plt.plot(x, y)

Numpy 数组支持 "vectorized" 操作。它们比遍历数组并从中创建列表要快得多 memory-efficient。

因此,在这种情况下不需要列表理解。直接对t进行操作比较好。

例如:

import numpy as np
import matplotlib.pyplot as plt

alpha = 1
t = np.linspace(0, 2*np.pi, num=1000)

x = alpha * np.sqrt(2) * np.cos(t) / (np.sin(t)**2 + 1)
y = alpha * np.sqrt(2) * np.cos(t) * np.sin(t) / (np.sin(t)**2 + 1)

plt.plot(x, y)
plt.show()

另外,如果你只想要形状,而不关心绝对值,你可以省略常量:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, num=1000)

x = np.cos(t) / (np.sin(t)**2 + 1)
y = np.cos(t) * np.sin(t) / (np.sin(t)**2 + 1)

plt.plot(x, y)
plt.show()