坐标图的刻度轴刻度标签
Scale axis tick labels for coordinates plot
我正在处理 VLBI 数据(超长基线干涉测量法,例如用于制作最近流行的黑洞阴影图像的数据)。
我正在绘制一张取自 FITS 文件的图像。通过 WCS 变换,它从像素转换为物理单位,即度。另外,我将中心像素放在 (0,0) 的物理单位中。
绘制时看起来不错。但我想以 mas(毫弧秒)为单位标记轴,因为天空中的成像区域非常小。
因此,我希望看到 1 作为刻度标签,而不是 0deg0'0.001" 或 0.001"。
这是打开图形的基本代码:
wcs = WCS(i[0].header).celestial # where i is a FITS object
wcs.wcs.crval = [0,0] # to remove absolute coordinates of a source
fig = plt.figure()
ax = fig.add_subplot(111, projection = wcs)
ra, dec = ax.coords[0], ax.coords[1]
- 我试过
ax.xaxis.set_major_formatter(FuncFormatter(format_func))
但是对于不是 'scalar' 的轴似乎还没有实现。
=> raise NotImplementedError() # 弄清楚如何换出格式化程序
- 将轴模式更改为 'scalar',即
ra.set_coord_type('scalar')
打破了定位器,我相信。
=> 所有刻度标签在 x 轴的 0 处重叠。
- Addind 比例根本不起作用(假设我做的一切都正确)
ax.ticklabel_format(useoffset = 1000, style = 'sci')
=> 无变化
是否有任何其他方法可以将坐标数据的轴标签转换为毫角秒?
我用了一种不太优雅的方式来做这件事,也许在这种情况下它会起作用。我为轴使用的标签是字符串而不是整数。
x_values = [0.000, -0.003, -0.006]
labels = []
for value in x_values:
labels.append(str(convert_to_mas(value)))
ax.set_xticks(x_values)
ax.set_xticklabels(labels)
这只是一般想法,但您必须根据自己的代码进行调整。如果您添加一个可重现的小示例,我可以更具体。 :)
好的,经过一番努力,我找到了问题的根源。
对于 VLBI 地图,轴应定义为偏移量,而不是 RA 和 DEC,即
w.wcs.ctype = [ 'XOFFSET' , 'YOFFSET' ]
这解决了整个问题,不再需要进行重大调整。
我正在处理 VLBI 数据(超长基线干涉测量法,例如用于制作最近流行的黑洞阴影图像的数据)。 我正在绘制一张取自 FITS 文件的图像。通过 WCS 变换,它从像素转换为物理单位,即度。另外,我将中心像素放在 (0,0) 的物理单位中。
绘制时看起来不错。但我想以 mas(毫弧秒)为单位标记轴,因为天空中的成像区域非常小。 因此,我希望看到 1 作为刻度标签,而不是 0deg0'0.001" 或 0.001"。
这是打开图形的基本代码:
wcs = WCS(i[0].header).celestial # where i is a FITS object
wcs.wcs.crval = [0,0] # to remove absolute coordinates of a source
fig = plt.figure()
ax = fig.add_subplot(111, projection = wcs)
ra, dec = ax.coords[0], ax.coords[1]
- 我试过
ax.xaxis.set_major_formatter(FuncFormatter(format_func))
但是对于不是 'scalar' 的轴似乎还没有实现。 => raise NotImplementedError() # 弄清楚如何换出格式化程序
- 将轴模式更改为 'scalar',即
ra.set_coord_type('scalar')
打破了定位器,我相信。 => 所有刻度标签在 x 轴的 0 处重叠。
- Addind 比例根本不起作用(假设我做的一切都正确)
ax.ticklabel_format(useoffset = 1000, style = 'sci')
=> 无变化
是否有任何其他方法可以将坐标数据的轴标签转换为毫角秒?
我用了一种不太优雅的方式来做这件事,也许在这种情况下它会起作用。我为轴使用的标签是字符串而不是整数。
x_values = [0.000, -0.003, -0.006]
labels = []
for value in x_values:
labels.append(str(convert_to_mas(value)))
ax.set_xticks(x_values)
ax.set_xticklabels(labels)
这只是一般想法,但您必须根据自己的代码进行调整。如果您添加一个可重现的小示例,我可以更具体。 :)
好的,经过一番努力,我找到了问题的根源。 对于 VLBI 地图,轴应定义为偏移量,而不是 RA 和 DEC,即
w.wcs.ctype = [ 'XOFFSET' , 'YOFFSET' ]
这解决了整个问题,不再需要进行重大调整。