坐标图的刻度轴刻度标签

问题描述 投票:1回答:1

我正在处理VLBI数据(超长基线干涉测量,就像用于制作最近趋势的黑洞阴影图像的数据)。我正在绘制一个从FITS文件中获取的图像。通过WCS变换,它从像素转换为物理单位,即度。此外,我已将物理单位中的中心像素放入(0,0)。

绘制时看起来不错。但我想用mas(毫秒)标记轴,因为天空上的成像区域非常小。因此,我希望看到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))

但是对于不是“标量”的轴似乎还没有实现。 => raise NotImplementedError()#弄清楚如何换出格式化程序

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

我相信打破定位器。 =>所有刻度标签在x轴的0处重叠。

  • 添加比例根本不起作用(假设我做的一切都正确)
ax.ticklabel_format(useoffset = 1000, style = 'sci')

=>没有变化

有没有其他方法可以将坐标数据的轴标签转换为毫秒?

python matplotlib fits
1个回答
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) 

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

© www.soinside.com 2019 - 2024. All rights reserved.