使用自定义转换初始化wcsaxe#
在 使用世界坐标初始化轴 ,我们看到了如何使用 WCS
物体。但是 WCSAxes
类也可以使用不必由 WCS
班级。相反,您可以初始化 WCSAxes
使用Matplotlib Transform
对象和字典 (coord_meta
)它提供了有关如何解释转换的元数据。
这个 Transform
应该表示从像素到世界坐标的转换,并且应该有 input_dims=2
而且可以拥有 output_dims
设置为任意正整数。此外, has_inverse
应设置为 True
以及 inverted
方法应该被实现。
这个 coord_meta
字典应包括以下关键字:
name
:一个iterable字符串,给出每个维度的名称type
:字符串的iterable,它应该是'longitude'
,'latitude'
或'scalar'
(对于任何不是经度或纬度的东西)。wrap
:表示经度的一组值,以角度(度)表示坐标。这应该是None
除非type
是'longitude'
.format_unit
:相当于Unit
对象提供用于设置标签格式的单位。这些可以设置为None
默认为unit
,但可以设置为Transform
返回以度为单位的值,而您希望标签的格式以小时为单位。
此外 coord_meta
可以选择包含以下键:
default_axislabel_position
:一个字符串的iterable,为每个世界提供一个框架的脊椎,在该框架上显示坐标的轴标签。每个字符串都应该可以用作set_axislabel_position()
.default_ticklabel_position
:一个字符串的iterable,为每个世界提供一个框架的脊椎,在该框架上显示坐标的刻度标签。每个字符串都应该可以用作set_ticklabel_position()
.default_ticks_position
:一个字符串的iterable,为每个世界提供了一个框架的脊椎,在该框架上显示坐标的刻度。每个字符串都应该可以用作set_ticks_position()
.
以下示例说明了使用变换和 coord_meta
:
from astropy import units as u
import matplotlib.pyplot as plt
from matplotlib.transforms import Affine2D
from astropy.visualization.wcsaxes import WCSAxes
# Set up an affine transformation
transform = Affine2D()
transform.scale(0.01)
transform.translate(40, -30)
transform.rotate(0.3) # radians
# Set up metadata dictionary
coord_meta = {}
coord_meta['name'] = 'lon', 'lat'
coord_meta['type'] = 'longitude', 'latitude'
coord_meta['wrap'] = 180 * u.deg, None
coord_meta['unit'] = u.deg, u.deg
coord_meta['format_unit'] = None, None
fig = plt.figure()
ax = WCSAxes(fig, [0.1, 0.1, 0.8, 0.8], aspect='equal',
transform=transform, coord_meta=coord_meta)
fig.add_axes(ax)
ax.set_xlim(-0.5, 499.5)
ax.set_ylim(-0.5, 399.5)
ax.grid()
ax.coords['lon'].set_axislabel('Longitude')
ax.coords['lat'].set_axislabel('Latitude')
