记号、记号标签和网格线#
对于下一页中的示例,我们从中介绍的示例开始 使用世界坐标初始化轴 .
坐标对象#
虽然对于许多图像,坐标轴与像素轴对齐,但情况并非总是如此,尤其是在世界坐标系或具有高曲率的坐标系中有任何旋转时,x轴和y轴与实际坐标之间的耦合变得不那么明确。
所以不是指 x 和 y 与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']
在这个例子中,图像是在银河系的坐标系中,所以这些坐标被称为 glon 和 glat . 对于赤道坐标系下的图像,可以使用 ra 和 dec . 名称仅适用于特定的天体坐标系-对于所有其他坐标系,应使用坐标索引 (0 或 1 )
每个坐标都是 CoordinateHelper 标签,可以用来控制坐标轴和坐标轴的标签。
坐标轴标签#
轴标签可以使用 set_axislabel() 方法:
lon.set_axislabel('Galactic Longitude')
lat.set_axislabel('Galactic Latitude')
轴标签相对于轴的填充也可以通过使用 minpad 选项。的默认值 minpad 为1,表示轴标签文本的字体大小。也允许负值。
lon.set_axislabel('Galactic Longitude', minpad=0.3)
lat.set_axislabel('Galactic Latitude', minpad=-0.4)
备注
请注意,如中所示 入门 ,也可以使用 plt.xlabel 或 ax.set_xlabel 表示法,用于设置轴标签(如果它们确实出现在x和y轴上)。
刻度标签格式#
可以使用描述格式的字符串指定记号标签的格式:
lon.set_major_formatter('dd:mm:ss.s')
lat.set_major_formatter('dd:mm')
格式字符串的语法如下:
格式 |
结果 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
所有的 h..., d..., m..., and s... 格式可用于角度坐标轴,而 x... 格式或有效的Python格式(请参见 String Formatting Operations )应用于非角度坐标轴。
对于任何角坐标格式,可以在格式字符串前加上 + 指定即使对于正值也包括该符号,例如:
格式 |
结果 |
|---|---|
|
|
|
|
角度坐标刻度标签的分隔符也可以通过指定字符串或元组来设置。
lon.set_separator(('d', "'", '"'))
lat.set_separator(':-s')
刻度/标签间距和属性#
记号/记号标签的间距应该有一个合理的默认值,但是您可能希望能够手动指定间距。可以使用 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)
默认情况下,刻度标签的重复部分(例如,整个度数或小时角)被省略,以保持刻度标签较短。 如果此简化导致勾号标签混乱,则可以通过指定禁用此行为 simplify=False :
lon.set_ticklabel(simplify=False)
lat.set_ticklabel(simplify=False)
小滴答声#
WCSAxes默认情况下不显示小刻度,但可以使用 display_minor_ticks() 方法。次要刻度的默认频率为5,但也可以指定此频率。
lon.display_minor_ticks(True)
lat.display_minor_ticks(True)
lat.set_minor_frequency(10)
记号、记号标签和坐标轴标签位置#
默认情况下,WCSAxes自动决定在哪些轴上显示哪些坐标,以最大限度地减少某些坐标没有标记或标记太少的情况。此外,在2-d LCS和矩形框架的情况下,两个坐标的标记都显示在所有轴上。
但是,可以重写这种自动化行为,并且可以使用 set_ticks_position() , set_ticklabel_position() ,而且 set_axislabel_position() 方法,每个方法都采用一个字符串或序列,该字符串或序列可以包含任何或多个 l , b , r ,或者 t (指示标记或标记标签应分别显示在左、底、右或顶轴上),例如:
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')
实际上,在上面的示例中,您应该能够仅指定勾号标签位置:
lon.set_ticklabel_position('bt')
lat.set_ticklabel_position('lr')
因为标记和轴标签默认显示在与标记标签相同的轴上。
如果您想切换回自动定位,您可以用单个 # :
lon.set_ticks_position('#')
lon.set_ticklabel_position('#')
lon.set_axislabel_position('#')
lat.set_ticks_position('#')
lat.set_ticklabel_position('#')
lat.set_axislabel_position('#')
的 # 指示每次绘制轴时都应动态重新分配位置。
在带有椭圆边框的绘图上,支持三个交替的记号位置: 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('')
我们可以使用以下方法再次恢复记号和记号标签:
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')
坐标网格#
由于坐标网格的属性链接到刻度和标签的属性,因此网格线属于上述坐标对象。可以一次绘制所有坐标的栅格:
ax.coords.grid(color='white', alpha=0.5, linestyle='solid')
备注
如果使用pyplot接口,还可以使用 plt.grid() .
或者,您可以为不同的坐标使用不同的颜色绘制网格。例如,可以使用以下选项显示格线:黄线表示RA,橙线表示赤道:
lon.grid(color='yellow', alpha=0.5, linestyle='solid')
lat.grid(color='orange', alpha=0.5, linestyle='solid')
内部记号和记号标签#
矩形框架的记号和记号标签的默认位置是框架的边缘。要在地块内部放置刻度或刻度标签,需要添加一条“可刻度”网格线。在这里,我们创建一个名为 i 在恒定经度-10角分,然后指定它应该有纬度刻度。
lon.add_tickable_gridline('i', -10*u.arcmin)
lat.set_ticks_position('li')
lat.set_ticklabel_position('li')