我想在极坐标(硬编码函数)中正确绘制螺旋波的热图。螺旋线相当于对数螺旋线。出现问题是因为螺旋不是极角的周期函数,我们使用的是网格,而不是简单的二维线。我想保留螺旋的内部部分,例如从 -2pi 到 4pi,它总是被最后一个 2*pi 间隔覆盖。
像黄金螺旋一样,是不是不可避免要简单地用多个相似的部分拼凑整个图案?下面是最小的工作示例。
也见图片
import numpy as np
import matplotlib.pyplot as plt
G = 6.674E-11
pc = 3.0857E16
year = 365.2422*24*3600
def velmap(r, phi, x0, x1, x2, x3):
A = 2*np.pi*G*pc*1e-3
B = year/pc
C = 1e3/(2*np.pi*G*pc)
v = np.sqrt(0.5*(x0*r)**2 + np.divide(A*x1*x2*r,
np.cosh((B*x3 + 2**-0.5*phi/x0)*x0*x2 - C*(x0**2*x2/x1*r))))
return v
popt = [9.18905547e+00, 1.40100594e-01, 3.20514383e+00, 3.94920210e+07]
nmap=200
r_plot = np.linspace(0, 200, nmap)
phi_plot = np.linspace(-2*np.pi, 4*np.pi, nmap)
r_grid, phi_grid = np.meshgrid(r_plot, phi_plot)
v_grid = velmap(r_grid, phi_grid, *popt)
print(popt)
plt.subplot(projection="polar")
plt.pcolormesh(phi_grid, r_grid, v_grid, shading='auto')
plt.colorbar()
plt.plot(phi_plot, r_plot, color='k', ls='none')
plt.show()
我不确定如何正确应用颜色图,欢迎提出任何想法。