刻度轴刻度标签用于坐标图

时间:2019-04-16 11:16:40

标签: python matplotlib fits

我正在处理VLBI数据(很长的基线干涉测量法,就像用来制作最近趋势的黑洞阴影图像的那样)。 我正在绘制从FITS文件中拍摄的图像。通过WCS转换,它可以从像素转换为物理单位,即度。另外,我将中心像素的物理单位设置为(0,0)。

绘制时看起来不错。但是我想用mas(milliarcseconds)来标记轴,因为天空上的成像区域很小。 因此,我希望将1作为刻度标记而不是0deg0'0.001“或0.001”。

Now, x-axis looks like this, units are arcseconds I want it to look like this. Units are milliarcseconds, i.e. 0.001 of an arcsecond

这是打开图形的基本代码:      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))

,但对于不是“标量”的轴,似乎尚未实现。  =>提高NotImplementedError()#找出如何换出格式化程序

  • 将轴模式更改为“标量”,即
ra.set_coord_type('scalar') 
我相信

破坏了定位器。 =>所有刻度线标签都在x轴的0处重叠。

  • Addind量表根本不起作用(假设我做的一切正确)
ax.ticklabel_format(useoffset = 1000, style = 'sci')

=>没有变化

还有其他将坐标数据的轴标签转换为毫秒的方法吗?

2 个答案:

答案 0 :(得分:1)

我使用了一种不是很优雅的方法,也许在这种情况下会起作用。我在轴上使用的是字符串而不是int的标签。

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) 

这只是一般性的想法,但是您必须将其适应您的代码。如果您添加了一个小的可复制示例,我可能会更具体。 :)

答案 1 :(得分:0)

好的,经过一些努力,我找到了问题的根源。 对于VLBI映射,应将轴定义为偏移量,而不是RA和DEC,即

w.wcs.ctype = [ 'XOFFSET' , 'YOFFSET' ]

这解决了整个问题,不再需要大的调整。

相关问题