使用自定义转换初始化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' .

  • unit :相当于 Unit 对象返回的世界坐标单位 Transform .

  • 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')

(png, svg, pdf)

../../_images/generic_transforms-1.png