在天空上绘制天文测量数据,非常漂亮

skymapper的Python项目详细描述


pypilicense

Skymapper

一组matplotlib指令,用于将天文测量数据从天球映射到2d。

这个软件包的目的是促进交互式工作,以及使用许多天文学家习惯的基于python的工作流创建出版物质量图。主要动机是用平面图形真实地表示弯曲天空中的样本和场,当观察到天空中相当大的一部分时,这一点就变得相关了。

它能做什么?例如,找到给定球面坐标列表的最佳投影,并从几行目录中创建密度图

importskymapperasskm# define the best Albers projection for the footprint# minimizing the variation in distortioncrit=skm.stdDistortionproj=skm.Albers.optimize(ra,dec,crit=crit)# construct map: will hold figure and projection# the outline of the sphere can be styled with kwargs for matplotlib Polygonmap=skm.Map(proj)# add graticules, separated by 15 deg# the lines can be styled with kwargs for matplotlib Line2D# additional arguments for formatting the graticule labelssep=15map.grid(sep=sep)# make density plotnside=32mappable=map.density(ra,dec,nside=nside)cb=map.colorbar(mappable,cb_label="$n_g$ [arcmin$^{-2}$]")# add scatter plotmap.scatter(ra_scatter,dec_scatter,s=size_scatter,edgecolor='k',facecolor='None')# focus on relevant regionmap.focus(ra,dec)

des footprint中的随机密度

对于探索性工作,您可以缩放和平移,也可以滚动输入/输出(google地图样式)。地图将自动更新没有规则间距的分划标签的位置。

语法尽可能地模仿matplotlib。当前支持的是标准绘图函数

  • 绘图
  • 分散性
  • hexbin用于装箱和插值样本
  • 文本(在["parallel","meridian"]中有一个可选的方向参数以沿任意一个分划对齐)

以及特殊功能

  • 示意图显示调查覆盖的区域
  • 顶点绘制简单凸多边形列表
  • healpix将healpix映射绘制为多边形列表
  • 密度在healpix单元格中创建密度映射
  • 外推从整个天空或子区域的采样生成字段

安装和先决条件

您可以克隆repo并通过python setup.py install安装,也可以使用获取最新版本

pip install skymapper

依赖关系:

  • 努比
  • scipy
  • matplotlib
  • 健康

对于调查足迹,您需要pymangle

背景

工作流的基本部分是

  1. 创建投影,例如hammeralbers
  2. 设置地图以保存投影和MatplotLib图形,ax,…
  3. 将数据添加到地图
  4. < > >

    有多个地图投影可用,完整列表存储在字典投影寄存器中。如果您想要的投影不包括在内,请打开一个问题,或者更好:自己创建它(见下文)并提交一个拉取请求。

    天文学中对经度有两个约定。例如,用于世界地图或银河地图的标准框架,其纵向坐标范围为[-180..180度,从西向东增加(换言之,在地图上,东方是正确的)。赤道(RA/DEC)坐标系为左手坐标系(即地图上的东面为左手坐标系),坐标范围为[0..360摄氏度T要确定约定,投影有一个参数lon_type,对于标准或赤道,分别可以是"lon""ra"。默认值为lon_type="ra"

    地图投影可以保留天空区域、角度或距离,但不能全部保留这三个。这意味着定义一个合适的投影必须是一个折衷方案。对于大多数应用来说,尺寸应该完全保持不变,这意味着角度和距离可能不会保持不变。通过调用:

    crit=skm.projection.stdDistortionproj=skm.Albers.optimize(ra,dec,crit=crit)

    这将优化反照率投影参数,以最小化地图失真的方差(即天空中真实圆的明显椭圆度)。可供选择的标准是,例如maxDistorationstdscale(对于面积不等的投影)。

    创建自定义投影

    要构建自己的投影,请从投影中派生。您将看到每个投影至少需要实现以下方法:

    如果投影有几个参数,则需要创建一个特殊的@classmethod optimize,因为默认参数只确定最佳的经度引用。例如,conicprojection.optimize

    创建/使用调查

    有几个调查是预先定义的,并在调查注册器字典中列出。如果你想要的调查不包括在内,不要绝望。要创建类,可以从survey派生类,该类只需要实现一个方法:

    >def包含(self、ra、dec)以确定ra、dec是否在封装外形内。

    如果这看起来像pymangle接口:它应该是。这意味着您可以避免定义调查的开销,例如将pymangle.mangle对象直接传递到footprint()

    限制

    mapprojection的组合是而不是amatplotlib转换。在许多原因中,使用不是矩形或椭圆的matplotlib.axes非常困难(可能不可能)。因此,我们决定将问题分成两部分:使用matplotlib对低级图形原语进行处理,并在其上对地图制作进行分层。这样,我们就可以控制球面上的插值方法或刻度标签的位置,以符合数百年来制图的视觉期望。虽然skymapper试图非常严格地遵循matplotlib约定,但有些方法可能无法按预期工作。如果您认为您发现了这样的案例,请打开一个问题。

    特别是,我们非常感谢您的帮助,以确保交互式功能在所有matplotlib后端都能正常工作。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java如何使用JDOM设置布尔字段   java准备语句和语句/查询缓存   java Jpanel与JFrame菜单栏重叠   java比较两个JodaTime DateTime对象   java为什么Android Room@Query LIKE不返回已知存在的数据   使用Java和COM4J的Quality Center V11脚本统计   java获取当前登录用户的详细信息   如果页面上存在元素,如何在控制台中显示   java在GUI不更新信息时使用SWING和多线程处理GUI   java LOG4J2 RollingFile Appender未写入文件   java“new TextToSpeech.OnInitListener()”的颜色不鲜艳,这表明它没有被使用,如何使其可用?   java在paint方法中绘制形状   JAVA木卫一。文件旅游目的地?   java Struts2 dojo锚定标记不起作用?   java JavaFX ObservalElist和提取器更新事件在应该时未触发