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()
我想知道是否有人知道在 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()