||
2009横空出世的APLpy(全称Astronomical Plotting Library in Python,https://aplpy.readthedocs.io/en/stable/)无疑通过其强大的集成成功博取了一大波天文学者的欢心,而其英文的谐音Apple Pie(苹果派)也深入人心。APLpy通过对于Astropy中的WCSAxes、以及大量Matplotlib基础功能,集合一系列Python基础包例如Astropy子包astropy.units, astropy.coordinates, Numpy等,最终用于产出了一款高度集成、用户友好的图像绘制包。现在打开大量观测相关的文献,使用APLpy绘制出来的图片比比皆是。
APLpy能够快速爆火其中一个原因就是其与DS9(另一款常用天文图像预览软件,https://sites.google.com/cfa.harvard.edu/saoimageds9)的梦幻联动。通过使用
import aplpy aplpy.FITSFigure.show_regions('my_region_name.reg')
可以十分方便的展示DS9中定义的区域my_region_name.reg。这种方法看似平平无奇,实则能够大大减轻图片标注、绘制标识的任务。并且可以有很高级的用法,这个留给读者慢慢摸索,笔者在后续也会展示一系列使用show_regions这个功能的高级玩法,敬请期待。
总而言之,看上去APLpy已经要主导天文图像的绘制,但是APLpy的优点正是它自身的劣势,过于集成的功能会导致一些自定义非常困难,Matplotlib自带的高度自由化的绘制功能被很大程度削尖了。那么Matplotlib有哪些高级的玩法是APLpy缺失的呢,我们也会开一版专门讲讲关于colorbar的绘制以及多张子图之间的联动、共同展示。
本期旨在告诉大家,不使用APLpy也能够绘制DS9的regions对象。其意义在于,当你不得不使用Matplotlib绘制一些APLpy无法绘制的图像时,不要被无法展示DS9图片绊住了“马腿”。
def show_regions(ax,region_fn,hdr,iftext=False): reg_name = region_fn r = pyregion.open(reg_name).as_imagecoord(header=hdr) patch_list, artist_list = r.get_mpl_patches_texts() for p in patch_list: new_p=copy(p) ax.add_patch(new_p) if iftext: for p in artist_list: new_p=copy(p) ax.add_artist(new_p)
此函数读取"region_fn"(DS9定义的region文件路径),通过投影在图片的header文件定义的天球坐标上,绘制在Matplotlib.axes上。
注意,region_fn一般有两种类型的对象,一种称为patches,即circle,rectangle,arrow等这类图像;另一种则称为artist,即一般是文字等对象,因此iftext如果改为True,即将artist也一并绘制。因为本绘制需要ax参数,因此请提前定义一个天球坐标投影的axes:
from astropy.wcs import WCS from astropy.io import fits hdr = fits.getheader(your_fits_name) w = WCS(hdr) ax1 = fig.add_axes([0.0,0.1,0.25,0.8],projection=w.celestial) show_regions(ax1,your_region_name,hdr,)
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 19:10
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社