我的格式为:
Az Elv Value
0 10 15
0 30 30
0 60 22
15 10 16
15 30 20
等等
我试图对这些测量进行插值,以获得天空和测量的平滑等高线图 . 我的数据没有直接开销的测量值以及低到远的测量值 .
目前,我按照以下步骤操作:
-
转换为笛卡儿
-
从笛卡尔坐标的最小值和最大值创建范围
-
使用
np.meshgrid
制作网格 -
使用griddata获取网格值
-
将网格坐标转换回极坐标
-
使用网格theta,r和值绘制一个contourf
我得到了一个很好的插值数据的极坐标图,我很满意,除了天顶(90度到75度)的填充值 . 我没有测量,希望它保持空白 . 我无法弄清楚如何做到这一点 . 如果查看图形,可以看到天顶处的插值测量没有意义 .
奖金问题,我正在翻转r轴,使90位于中心,0位于外侧 . 让它看起来像夜空 . 我可以从90中减去r值来获得该值吗?
以下是我的代码:
data = ascii.read(file)
azimuth = np.array(data['az'])
elv = np.array(data['elv'])
values = np.array(data['nsb'])
theta = np.radians(azimuth)
r = elv
z = values
x = r * np.cos(theta)
y = r * np.sin(theta)
xgrid = np.linspace(x.min(), x.max(), len(x))
ygrid = np.linspace(y.min(), y.max(), len(y))
xgrid, ygrid = np.meshgrid(xgrid, ygrid)
zgrid = griddata((x, y), z, (xgrid, ygrid), method='cubic')
#zgrid = ma.masked_invalid(zgrid)
print(zgrid.min(), zgrid.max())
r = np.sqrt(xgrid**2 + ygrid**2)
#r = ma.masked_where(r < 15, r)
theta = np.arctan2(ygrid, xgrid)
ax = plt.subplot(111, projection='polar')
ax.set_facecolor('k')
colors = plt.cm.get_cmap('cubehelix_r')
levels, steps = np.linspace(18.375, 22.375, 35, retstep=True)
print(steps)
cax = ax.contourf(theta, 90-r, zgrid, levels=levels, cmap=colors)
cbar = plt.colorbar(cax)
cbar.set_label(r'mag/arcsec$^2$')
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
ax.set_yticklabels('')
ax.yaxis.grid(False)
ax.xaxis.grid(False)
plt.ylim(0,90)
plt.show()
谢谢!