天文极坐标图与griddata内插

时间:2018-08-28 00:00:19

标签: python matplotlib interpolation polar-coordinates astronomy

我的数据格式为:

Az     Elv     Value
0      10       15
0      30       30
0      60       22
15     10       16
15     30       20

以此类推

我试图对这些测量值进行插值,以获得天空和测量值的平滑轮廓图。我的数据没有直接开销的测量结果,也没有地平线的测量结果。

当前,我按照以下步骤操作:

  1. 转换为直角坐标
  2. 从笛卡尔坐标的最小值和最大值创建范围
  3. 使用np.meshgrid
  4. 制作网格
  5. 使用griddata获取网格值
  6. 将网格坐标转换回极坐标
  7. 使用栅格theta,r和值绘制轮廓线

我得到一个很好的插值数据极坐标图,除了天顶(90度到75度)的填充值外,我很满意。我在那里没有测量,希望它保持空白。我不知道该怎么做。如果查看该图,您会发现在天顶处的插值测量没有意义。

interpolated polar plot

奖金问题,我正在翻转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()

谢谢!

0 个答案:

没有答案