记号、记号标签和网格线#

对于下一页中的示例,我们从中介绍的示例开始 使用世界坐标初始化轴 .

坐标对象#

虽然对于许多图像,坐标轴与像素轴对齐,但情况并非总是如此,尤其是在世界坐标系或具有高曲率的坐标系中有任何旋转时,x轴和y轴与实际坐标之间的耦合变得不那么明确。

所以不是指 xy 与Matplotlib一样,我们使用专门的对象来访问坐标。绘图中使用的坐标可以使用 coords 轴的属性。作为提醒,如果使用pyplot接口,则在创建子批次时可以获取轴的引用::

ax = plt.subplot()

或者你可以打电话 plt.gca() 随时获取当前活动轴:

ax = plt.gca()

如果使用Matplotlib的面向对象接口,则应该已经有了对轴的引用。

一旦有了Axis对象,可以通过索引访问坐标:

lon = ax.coords[0]
lat = ax.coords[1]

或者,对于通用坐标系,按其名称:

lon = ax.coords['glon']
lat = ax.coords['glat']

在这个例子中,图像是在银河系的坐标系中,所以这些坐标被称为 glonglat . 对于赤道坐标系下的图像,可以使用 radec . 名称仅适用于特定的天体坐标系-对于所有其他坐标系,应使用坐标索引 (01

每个坐标都是 CoordinateHelper 标签,可以用来控制坐标轴和坐标轴的标签。

坐标轴标签#

轴标签可以使用 set_axislabel() 方法:

lon.set_axislabel('Galactic Longitude')
lat.set_axislabel('Galactic Latitude')

(png, svg, pdf)

../../_images/ticks_labels_grid-3.png

轴标签相对于轴的填充也可以通过使用 minpad 选项。的默认值 minpad 为1,表示轴标签文本的字体大小。也允许负值。

lon.set_axislabel('Galactic Longitude', minpad=0.3)
lat.set_axislabel('Galactic Latitude', minpad=-0.4)

(png, svg, pdf)

../../_images/ticks_labels_grid-4.png

备注

请注意,如中所示 入门 ,也可以使用 plt.xlabelax.set_xlabel 表示法,用于设置轴标签(如果它们确实出现在x和y轴上)。

刻度标签格式#

可以使用描述格式的字符串指定记号标签的格式:

lon.set_major_formatter('dd:mm:ss.s')
lat.set_major_formatter('dd:mm')

(png, svg, pdf)

../../_images/ticks_labels_grid-6.png

格式字符串的语法如下:

格式

结果

'dd'

'15d'

'dd:mm'

'15d24m'

'dd:mm:ss'

'15d23m32s'

'dd:mm:ss.s'

'15d23m32.0s'

'dd:mm:ss.ssss'

'15d23m32.0316s'

'hh'

'1h'

'hh:mm'

'1h02m'

'hh:mm:ss'

'1h01m34s'

'hh:mm:ss.s'

'1h01m34.1s'

'hh:mm:ss.ssss'

'1h01m34.1354s'

'd'

'15'

'd.d'

'15.4'

'd.dd'

'15.39'

'd.ddd'

'15.392'

'm'

'924'

'm.m'

'923.5'

'm.mm'

'923.53'

's'

'55412'

's.s'

'55412.0'

's.ss'

'55412.03'

'x.xxxx'

'15.3922'

'%.2f'

'15.39'

'%.3f'

'15.392'

'%d'

'15'

所有的 h..., d..., m..., and s... 格式可用于角度坐标轴,而 x... 格式或有效的Python格式(请参见 String Formatting Operations )应用于非角度坐标轴。

角度坐标刻度标签的分隔符也可以通过指定字符串或元组来设置。

lon.set_separator(('d', "'", '"'))
lat.set_separator(':-s')

(png, svg, pdf)

../../_images/ticks_labels_grid-7.png

刻度/标签间距和属性#

记号/记号标签的间距应该有一个合理的默认值,但是您可能希望能够手动指定间距。可以使用 set_ticks() 方法。可以使用不同的选项:

  • 手动设置勾号位置为Astropy Quantity ::

    from astropy import units as u
    lon.set_ticks([242.2, 242.3, 242.4] * u.degree)
    
  • 也可以将记号之间的间距设置为Astropy Quantity ::

    lon.set_ticks(spacing=5. * u.arcmin)
    
  • 设置刻度的近似数量:

    lon.set_ticks(number=4)
    

对于角轴,将间距指定为Astropy Quantity 避免舍入错误。这个 set_ticks() 方法还可以用于设置记号的外观(颜色和大小),方法使用 color=size= 选项。

这个 set_ticklabel() 方法可用于更改刻度标签的设置,如颜色、字体、大小等:

lon.set_ticklabel(color='red', size=12)

此外,此方法还有一个选项 exclude_overlapping=True 以防止显示重叠的记号标签。

我们可以将此应用于前面的示例:

from astropy import units as u
lon.set_ticks(spacing=10 * u.arcmin, color='yellow')
lat.set_ticks(spacing=10 * u.arcmin, color='orange')
lon.set_ticklabel(exclude_overlapping=True)
lat.set_ticklabel(exclude_overlapping=True)

(png, svg, pdf)

../../_images/ticks_labels_grid-8.png

小滴答声#

WCSAxes默认情况下不显示小刻度,但可以使用 display_minor_ticks() 方法。次要刻度的默认频率为5,但也可以指定此频率。

lon.display_minor_ticks(True)
lat.display_minor_ticks(True)
lat.set_minor_frequency(10)

(png, svg, pdf)

../../_images/ticks_labels_grid-9.png

记号、记号标签和坐标轴标签位置#

默认情况下,第一个坐标的记号和坐标轴标签显示在x轴上,第二个坐标的记号和坐标轴标签显示在y轴上。此外,两个坐标的记号显示在所有轴上。可以使用 set_ticks_position()set_ticklabel_position() 方法,每个方法都接受一个字符串,该字符串可以包含 lbrt (指示记号或记号标签应分别显示在左、下、右或上轴上):

lon.set_ticks_position('bt')
lon.set_ticklabel_position('bt')
lon.set_axislabel_position('bt')
lat.set_ticks_position('lr')
lat.set_ticklabel_position('lr')
lat.set_axislabel_position('lr')

(png, svg, pdf)

../../_images/ticks_labels_grid-10.png

我们可以使用以下方法设置默认值:

lon.set_ticks_position('all')
lon.set_ticklabel_position('b')
lon.set_axislabel_position('b')
lat.set_ticks_position('all')
lat.set_ticklabel_position('l')
lat.set_axislabel_position('l')

(png, svg, pdf)

../../_images/ticks_labels_grid-11.png

在带有椭圆边框的绘图上,支持三个交替的记号位置: c 对于外部圆形或椭圆形边界, h 对于水平轴(通常是椭圆的长轴),以及 v 对于垂直轴(通常是椭圆的短轴)。

隐藏记号和记号标签#

有时隐藏蜱虫和蜱虫标签是可取的。一个常见的场景是,WCSAxes在子图网格中使用,而tick标签在行或列之间是冗余的。记号标签和记号可以用隐藏 set_ticklabel_visible()set_ticks_visible() 方法分别为:

lon.set_ticks_visible(False)
lon.set_ticklabel_visible(False)
lat.set_ticks_visible(False)
lat.set_ticklabel_visible(False)
lon.set_axislabel('')
lat.set_axislabel('')

(png, svg, pdf)

../../_images/ticks_labels_grid-12.png

我们可以使用以下方法再次恢复记号和记号标签:

lon.set_ticks_visible(True)
lon.set_ticklabel_visible(True)
lat.set_ticks_visible(True)
lat.set_ticklabel_visible(True)
lon.set_axislabel('Galactic Longitude')
lat.set_axislabel('Galactic Latitude')

(png, svg, pdf)

../../_images/ticks_labels_grid-13.png

坐标网格#

由于坐标网格的属性链接到刻度和标签的属性,因此网格线属于上述坐标对象。可以一次绘制所有坐标的栅格:

ax.coords.grid(color='white', alpha=0.5, linestyle='solid')

(png, svg, pdf)

../../_images/ticks_labels_grid-14.png

备注

如果使用pyplot接口,还可以使用 plt.grid() .

或者,您可以为不同的坐标使用不同的颜色绘制网格。例如,可以使用以下选项显示格线:黄线表示RA,橙线表示赤道:

lon.grid(color='yellow', alpha=0.5, linestyle='solid')
lat.grid(color='orange', alpha=0.5, linestyle='solid')

(png, svg, pdf)

../../_images/ticks_labels_grid-15.png

内部记号和记号标签#

矩形框架的记号和记号标签的默认位置是框架的边缘。要在地块内部放置刻度或刻度标签,需要添加一条“可刻度”网格线。在这里,我们创建一个名为 i 在恒定经度-10角分,然后指定它应该有纬度刻度。

lon.add_tickable_gridline('i', -10*u.arcmin)

lat.set_ticks_position('li')
lat.set_ticklabel_position('li')

(png, svg, pdf)

../../_images/ticks_labels_grid-16.png