jfplot (jiang_fits_plot) v1 蒋兆基 2012,9,9 一。概述 PGPLOT是个常用的绘图软件包,但是她的出口是:平面图像。对于一些大量 “绘点”的图像,“模糊”一片,看不出真实的“脊梁”。还有,对于fits图 像的处理,也无能为力。 针对上述两问题,发展了jfplot 程序。自娱自乐。 鉴于日常遇到大量的问题是平面制图,因此jfplot也包含了平面制图功能。 jfplot输入流,是ASCII码文件;大量的点重新结构输入文件太麻烦,因此 jfplot具有解读,已存在的数据文件功能。 不断将天文常用制图方式规范化,加入jfplot,方便自己方便用户。 jfplot是程序,不是软件包。和使用“语言”无关。无需安装及编译链接。 jfplot和所使用的操作系统无关。可提供各种机器的命令程序,因此,能在 XP中使用。 window用户需准备个ds9.exe,(从uband::vega2/rhbin中拷一个,无需安装) jfplot由C语言写成,借用pgplot的思路,采用latex的方式,最后生成 FITS 文件。(短整型,实型,单字节可选)附加生成GIF。供观看存档。 二。step BY step 1. sftp uband:/vega2/jf/下的所有文件 到你的 linux 或 XP 的某目录 2. 就在某目录下 3,键入 jf a1 (观看生成的a1.gif) 4. jf a2 (观看生成的a2.gif) 5. jf a3 (观看生成的a3.gif) 6. jf a4 (需要a0004.fit,已附上了a4.fit) 用户自行生成ASCII码文件。供jfplot运行 例1:最简形式, 编辑三行,名为a1.jf 就能制图。(即上边第3个操作) #b a1 400 #e #G "BATC UBAND SUCSS" USL_UCAC3, "HELLO JFPLOT" --- 也可以将前两行写全了,成为: #begin a1.fit 400 300 50 // 出口文件名,X Y_pixels,边框pixel #env 0,400,0,300, 2 // 即env的4参数和框的tick类型 运行: jf a1 (回车即可,光键入jf,显示JFPLOT的KeyWORD help) 就能得到 a1.fit 和 a1.gif。 从已编辑的DEMO文件中(*.jf)可看到: A. 整实型混搭,分隔符是空格或逗号,若字串中有空格,须用双引号。 B. 命令#打头,第二个是“关键词”,长短无关,大小写无关。 C. //是注释, 可出现在任何地方。 三。 jfplot实时给出:状态,错误,警告信息。主题针对: 1. 大量“绘点”在fits图像上的操作 实质是两维“直方图”的制作。 生成的fits图像,在ds9上若用Zscale看,那和pgplot的制图,无差别,因为 生成fits图的背景“无噪声”。要用其它Scale模式看,才能看出模样。 既然是直方图统计,那么就涉及到BIN的大小。因此设定y方向上的物理尺度 pixel数,不宜太大。和所用数据的有效小数位数也有关,否则成条状。 2. fits图像显示: 实质是:挑选不同的已有的fits天图,抽出特定位置的小块,拼成大图,小图 之间可有空隙,有注释。随意发挥。(其它功能待开发) 3. 可以对已存在的数据文件,带路径操作。 四。 jfplot内部数据结构: jfplot内部“数据阵”不同于pgplot,无法“种植”到PGPLOT包中去。jfplot 也无法调用pgplot中任何子程序。 反而,jfplot是 “命令行”程序,用户在自己的程序中,可用system命令调用。 可以生成“巨大”的fits文件,例:短整型达 32,000*32,000, 当你设置图像 大小后,程序自动给出所占系统可用内存百分比。 字体: ASCII码显示:两种大小的固定字体。 汉字显示: 三种 1.如果,你对汉字显示感兴趣,那么在你机器上拷上“汉字字库” han.162, han.24,han.48;存放在当前目录或一劳永逸地放在: linux: /vega2/pgplot window:C:\vega2\pgplot 这里,仅借用个名称,和pgplot无任何关系 2.GB2312码本 a。提供han.GIF文件, (该码本,就是用本程序产生)一级码表按拼音;二 级码表(僻用字)按笔划部首查找。 容易观看。(ACDSee不错) b。提供gb2code程序;用“记事本”编辑一个文件,内含所需汉字,运行后, 即得汉字编号。(其中ASCII码,自动转成GB编码) 五。 数据文件及语法: 1. jfplot命令行,可以不按次序,但设置fits类型必须靠前。具体操作次序: fits,begin, env, ... 2. 字串可以写到框外。 3. *.jf文件,每行数据,少于255个字符。 4. 文字,汉字, 位置定位均定位在“左上角”。 5. 坐标两套: A。world 用env设, B. pixel 用begin设 可以交替使用,用o命令有效。world坐标为默认坐标。 6. *.jf中,jf命令可以“嵌套” 例:在 *.jf文件中可以出现 #next jf a1.jf 语句。 7. *.jf中,可以作多幅图,以及可用image0命令, 合成大图。(见a3.jf) 六。 jfplot内部命令一览表 #a 写汉字 #b (begin) jfplot开始运行,设物理尺寸pixel及边框pixel。 #c (color) 设:颜色(16种)+(16~240)级灰度。如不是8bitFITS,任意。 #e (env) world坐标设置,及边框tick“疏密” #d (done) 结束本次作图,为下幅图初始化参量。(作单图可省) #f (fits类) 生成fits文件类型 8,16,32 对应 byte,short,float #g (gb_label) 三边框外标题,顶部正标题中,中英文均可。 #h (hisogram) 逐点画直方图,允许文件操作。 #i (image) 处理外来fits文件 #k (keyword) 写入fits头的KEYWORD信息,如无=号,认为是comment #l (line) 画线 #n (next_command) 后续命令, 执行外部命令 #o (origion) 坐标选取:world 或 pixels 坐标, 即 0 或 1 #p (point) 画点,允许对数据文件操作。 #q 设,点类型 目前45种。编号(-22 ~ 22 ) #s (size) 设:汉字 16,24,48,间距 0~9,text大小 11,10 方向 12,13 #t (text) 写ascii串 #v (version) 写制作日期时间,版本;写在右下角。 #w (width) 设线,框宽度, 1,2,3 (2 定位精度有点偏) 七。 命令具体解释 (注释中第1个可选参数值,为默认值) 1. 坐标选用 #origion 0/1 or world/pixel begin 中定义了 PIXEL 坐标 env 中定义了 WORLD 坐标 2. fits 文件中的注释行 写到生成的fits头上,小于等于50行。 (22行前,保留) #keyword 两类信息, #k “this a sample of jfplot version 20120823” (COMMENT) #k DATE-OBS= “2011-10-30” (KEYWORD) #k EPOCH= 2000.0 第1字串开头,出现“ 号者, 为comment。 在第9有效字符之前出现=号,认为KEYWORD。 3.置 fits文件类型, 8 单字节, 16为短整型, 32 为实型, #f 16 // 8,16,32 须在begin之前出现,才不会影响图像buffer区的认定。 4. 打开jfplot #begin fits文件名 X向pixel Y向pixel 边框pixel [背景图像,x,y] #b abc.fit 540 400 80 #b abc.fit 540 400 80 tgl.bmp 0 200 背景图像是256色BMP,提供程序jpg2bmp.exe, 转类型,linux用convert x,y 是背景图像的截取起点。 在begin之前,也可先用#color 命令,设定图像背景颜色。 5. 实际使用坐标(world),图像框类型 #env x起点坐标 x终点 y起点 y终点 框类型 框类型: 0 无框;1 有框;2 (2~9) 有框有标记有尺度。 如果觉得框上的标记太少,可以选取2~9之间的数。 #e 9 29.0 -8 8 2 6. 设:颜色(仅 fitstype=8 时起作用) #color 0,1,。。。15 + 240 级灰度 // 255 #c 2 0 为背景色,用于:“抹去”以前的作图 颜色表。请见abc.gif 如出现在 #b 之前, 定义为整图背景。 在fitstype=16/32, 可以定义大于 255。 7. 点形状 #q 6 // 1, -22~+22 见abc.gif 8. 点 (文件处理功能同于 #h ) #point x坐标 y坐标 或 #point 文件名 -x 列 [-r x1 x2] -y 列 [-u 列] [-v 列] [-t n] [-c n] #p 12 2.4 #p a0004.cat -x 72 -r 10 20.5 -y 99 -v 72 -c 5 -t 0.01 (参数次序无关) a0004.cat 内含psf,bertin,usl星等,和usl的位置误差,都用来可以做统计。 -x 列 x方向上的数据处于文件中的第?列。例中为 psf星等 -r x1 x2 太亮的太暗的不适合放在一起统计,给出统计范围。至多5万颗 画图星数目无限制。 -y 列 Y 方向上的数据列号, 例中为 bertin星等,开始出现在99列。 -v 列 意思同上。以 y-v 作为 Y 来统计。 例中:bertin-psf 无此项,光用y数据来统计。 -u 列 意思同上。以 x-u 作为 X 来统计。 画色指数图时要用到。 -t n 剔除3sigma点时的限制,不想做太多的“轮”,不致于剩点太少。 n 大于1, 代表做 n 轮,停止剔除。 n 小于1, 代表当A,B参数的RMS小于此给定数,停止。 -c n 以什么颜色画线。 如无此项,则不画线。 其中,-r,-u,-v,-c -t是可选项。 如有-r项,则以 Y = A*X + B ,最小二乘法,剔除 3 sigma点,给出结果 如有-r,-c项, 还可以画出 上面的直线方程。 9. 线 (不必告知数组大小) #line x1起点坐标 y1起点,x2 y3,x3 y3,... #l 7 10,20 10,14 15,7 20 10. 设画线的宽度 #width n // 1,2,3 #w 3 仅对线,框起作用;对显示文字,直方,fits图像不起作用。 11. 直方图, (文件处理功能同于 #p ) #h x y 一行代表一个点。在fits图对应的BIN,值加一。 和#p类似,也可对外部数据文件操作。 当某个bin 在 #f 8情形下“溢出”,(大于240),会报警,请改用#f 16 12. 文字行 #text x坐标 y坐标 ascii码正文 #t 10 2 “BATC UBAND USL UCAC3” 13. 设:汉字点阵大小,字符间距,字体大小,写字方向 #size 16 // 24,16,48 点阵 汉字大小 #s 1 // 0,1,2,3,4,5,6,7,8,9 字符间距 #s 10 // 11,10 字体大小 #s 13 // 12,13 12延X,13延Y,写字方向 14. 汉字文字行 #a x坐标 y坐标 汉字编码... #a 10 2 2590 2850 4476 4636 4408 (显示:国家天文台) 如想用半宽字体的ASCII码,写汉字时预留空间,用#text 补上。 汉字代码得到,可以从: a。han.gif b “记事本”编辑,gb2code处理。 15. 标题 #gb_label x字串 y字串 正标题字串 #a “magniutude” “delta_mag.” “jfplot 2012 8 23" #a “R.A.” “Dec.” 2590 2850 4476 4636 4408 注:x,y 轴标题,不提供汉字形式。要做到也不难,用#a即可。 16。右下标显示制作时刻,版本号 #version #v (无参数) 17. fits图像 #imageN x坐标 y坐标 外部fits图像名 中心RA(x) 中心DEC(y) pixels数 几何压缩比例 读值比例系数 zero 重叠处理方式 #I0 。。。 N 不同的fits图像操作模式。 x坐标 y坐标: 生成图像上的起点 外部fits图像名:待处理的图像名,(可带路径) 中心RA(x) 中心DEC(y):欲取小块图的中心位置,xy,RaDec均可,Ra和Dec 须是规范写法。 非UBAND,BATC的fits图像,目前只能以X,Y形式出现。 pixels数:取出图像长宽大小 几何压缩比例:大于等于1 读值比例系数 zero: 生成值=读值比例系数*读入值+zero 重叠处理方式:若输入图像在生成图像上重叠,1:重叠,2:覆盖 ====已有模式 i0 X,Y 文件名 (8bit 图像) // 可以重叠,后者覆盖前者 i1 X,Y,文件名,CenX,CenY,SizeX [SizeY] (bit 16 或 32) 18. 命令链: 运行外部命令。 #nextcommand 。。。 #n g6 a1.fit -t -c (t 反转,c有彩色) 19. 结束本次作图,初始参量 #done (无参数) 八。后记: 程序用C写成,一个内核加上命令解释,构成jf,(jf.exe)提供给用户。 jf还未满月,有待修改充实。 abc.gif,han.gif 是C程序直接调用内核而成。 jfplot有待用户使用,提出意见,促其成长。 jfplot肯定存在BUG,用户使用出错找不到原因,请将*.jf以及所用到 的数据文件,打包邮寄给我,本人必复。 有关更多的fits文件操作,思想尚未形成,会发展,增其功能。 经常注意版本升级,现在是v1。 九。 附加命令及文件: A。命令: jf jfplot,加上第3参数,显示输入数据流,有利找到出错处。 g6 fits 转 GIF。bits=16,32的图像转8bit,灰度不易掌控。 gb2code GB码转jfplot使用数值。 jpg2bmp 16m色jpg 转 256色BMP B. 图像: abc.gif 画点形状,颜色表 han.gif GB码本。 a4.fit fits文件操作结果示意。 readme.gif 同于readme.txt 十。 常见问题: 1. 为什么生成GIF,而不是jpg ? jpg压缩率不是更高吗? jpg 适用于16M色图片。有损压缩。 jfplot 生成256色图像。GIF无损压缩。在此,压缩率优于jpg。 2. 字体能像pgplot 的 pgsch命令,放大缩小吗? 不能。 这里是严格点对点,不走形。 只能用程序提供的两种字体和三种汉字去“凑合”。 3. 特殊字母? 可以,特殊字母(希腊,上下标等),见GB码本,用#a 去写。 4. 和PGPLOT有啥不同 ? A。和pgplot的数据“平台”不同。 jfplot生成fits,灰度显示,虽然目前fits功能不多,但有潜力,能发展 处理CCD图“几何”问题。 B. 和系统语言无关,特别是,能在XP上可以运行。 C. 语法简单,不“严谨”,两套坐标系统同时工作,方便用户。 D。将不断加上,天文上常用的制图及统计方式。 E。不具备“复杂”的制图功能;此点上,取代不了PGPLOT。 F. 输出仅fits,GIF。观看请用ds9,及已有的看图像软件。