背景知识
一、目的
cgmaptools软件绘制指定基因组区域的DNA甲基化水平变化趋势
示例图1:可视化基因组上所有基因及其上下游区域的甲基化水平变化趋势
示例图2:某一个基因及其上下游区域的甲基化水平变化趋势
二、绘图步骤
绘制此图需要分为以下几步数据处理、运算和可视化:
- 获取cgmaptools可用的输入文件(文件格式转换)
- cgmaptools bed2fragreg
- cgmaptools mfg
- cgmaptools fragreg
三、Tips
提前理解cgmaptools bed2fragreg / mfg / fragreg这三个模块的功能,主要是他们的输入和输出文件格式;
内容较多,相比于deeptools plotProfile功能,更多的需要自己操作的地方;
参数较少但影响很大,尤其是在划分fragment长度的参数,这里需要多试几次;画这张图的最重要的部分是选择你要进行绘制的区域;
deeptools和ngsplots貌似也能画,deeptools的输入文件是bigwig格式文件,参考:https://zhuanlan.zhihu.com/p/166282791,可以使用bedGraphToBigWig小工具进行转换;
实战
以genebody的上下游区域的区域动态甲基化水平为例
Tools:shell语言
示例代码:cmd_meth_dynamics_of_targetANDflank_region.sh
version1
#!/bin/bash
############################################
# cgmaptools fragreg
# Description: Plot methylation dynamics of target and flanking region for multiple samples,如gene body及其附件区域的甲基化水平
# author: Zhiwei Lian
# date: 2021.08.23
# 注:cgmaptools v0.1.2的大部分模块依赖于python2,所以需要在python2的Linux环境下运行。
############################################
work_dir=${1}
cd ${work_dir}
# 1.cgmaptools bed2fragreg:Generate fragmented regions from BED file,即将指定(长度)区域划分为片段(fragment/bins)。
# 建议查看一下使用说明,因为这几个参数设置只有理解了才能够设置:cgmaptools bed2fragreg --help
# -n INT: 表示target regions中Number of bins to be equally split [Default:1];这里等长分割的数目是指输入的bed文件的start到end这一段区域划分为的bins数目,也就是target regions。平均划分的好处是可以避免不同target regions的不同的宽度,这也是cgmaptools fragreg要优于deeptools plotProfile的一个地方。理论上说INT越大,展示时波动越小。
# -F INT_list List of region lengths in upstream of 5' end, Ex: 10,50. List is from 5'end->3'end
# -T INT_list List of region lengths in downstream of 3' end, Ex: 40,20. List is from 5'end->3'end
# 总的来说,需要根据数据来源(WGBS/RRBS)或者位点在这些区域的富集程度,灵活调节可视化区域的上下游长度以及每个bins的宽度(参数-n,-F,-T)
# 注:输入的BED文件要求至少包含4列,即<chr> <start> <end> <strand>
# 首先最重要的是想好需要可视化的"target and flanking region" 的长度,并设置每个fragment/bins的宽度。
# 举例:假设可视化gene body上下游的区域宽度为15kb=15000bp
# 将这15kb划分的bins宽度为500,则有30个bins
#500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500
# 将这15kb划分的bins宽度为300,则有50个bins
#300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300
# genebody使用文件更新
input_bed2fragreg=/mnt/MD3400/data003/lianzhiwei/01project/00RefandAnno/02_annotation/02_gene_annotation/04.UCSC-Browerand-Tool_download/hg19_GRCh37/UCSCgenes_knownGene_20201102/genebody_from_Gene/Gene_reduce_column.v2.bed
cgmaptools bed2fragreg -i ${input_bed2fragreg} \
-n 100 \
-F 300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300 \
-T 300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300 \
-o cgmaptools_bed2fragreg_BinWidth300.bed
# 2.使用"cgmaptools mfg" 研究片段化区域中的甲基化(methylation fragment),计算样本在上一条命令划分的每个fragment的甲基化水平,。
# 该功能可用于绘制跨基因体,转座子元件和其他用户提供区域的mC分布。
input_CGmap=/mnt/MD3400/data003/lianzhiwei/01project/01scRRBS/project/data/bismark_CpG_report_txt/coverage2cytosine_all_sample/scRRBS_5CellLines/bismark2cgmap/
for input_filename in $(ls ${input_CGmap} | grep ".CGmap");do
prefix=$(echo ${input_filename} | awk -F '.CGmap' '{print $1}')
cgmaptools mfg -i ${input_CGmap}/${input_filename} -r cgmaptools_bed2fragreg_BinWidth300.bed -x CG > ${prefix}.mfg
done
# tips1:最好在cgmaptools_bed2fragreg转换获得的bed文件所在文件夹下运行这一步,因为跑完这一步后容易不记得结果文件"*mfg"到底是哪个区域的甲基化水平
# tips2:WGBS测序获得的位点数目达千万级别,但计算使用到的染色体区域只有一部分,为了提高运行速率,提取需要用到的那条染色体上的位点,比如我们只需要提取出 “chr14”上的CpG sites
for input_filename in $(ls ${inut_CGmap1} | grep ".CGmap");do
prefix=$(echo ${input_filename} | awk -F '.CGmap' '{print $1}')
cat ${inut_CGmap1}/${input_filename} | grep ^chr14 >${prefix}.chr14.CGmap
done
# 3. 合并多个样本的methylation fragment(mfg)文件为一个矩阵格式。这一步没有轮子,这是作者提供的合并代码,自己也可以写
# tips1:从任意一个methylation fragment文件中获取表头并把第一个字段修改为"Sample";如文件Sample_1.mfg
# tips2:提取出样本在每个fragment的平均甲基化的那行(total_ave_mC),并把样本名作为行名
# tips3:这里的文件名命名采用的是sed命令替换,可以按需修改替换的字符串
(head -1 H1-diagnosis.chr14.mfg | awk -F "\t" -v OFS="\t" '{$1="Sample"; print $0;}';
for mfg_file in *.mfg; do
cat ${mfg_file} | awk -F "\t" -v OFS="\t" -v SampleName=$(echo ${mfg_file} | sed s/.mfg//g) '/total_ave_mC/{$1=SampleName;print $0}'
done
) > mfg_merge.xls
# 4.使用cgmaptools fragreg将mfg得到的结果进行可视化
cgmaptools fragreg --help
# Description: Plot methylation dynamics of target and flanking region for multiple samples
# -r RATIO, --ratio=RATIO:[opt] range ratio between target region and flanking region in plot. [default: 5],值越大,在结果图的横坐标,target regions占比越多,flanking region占比越少
# 可视化多个样本
cgmaptools fragreg -i mfg_merge.xls --ratio=2 -f pdf -o meth_fragment_merge_multi_sample.pdf
# 可视化单个样本,一般不需要
cgmaptools fragreg -i Sample_1.mfg -f pdf -o test_1.pdf
version2
#!/bin/bash
############################################
# cgmaptools fragreg
# Description: Plot methylation dynamics of target and flanking region for multiple samples,如gene body及其附件区域的甲基化水平
# author: Zhiwei Lian
# date: 2021.08.23
# 注:cgmaptools v0.1.2的大部分模块依赖于python2,所以需要在python2的Linux环境下运行。
############################################
###################################
# 传入参数
###################################
# 1. 运行结果和运行过程产生的文件保存路径
output_path=
# 2. BED格式的regions的绝对路径,精确到文件的绝对路径
region_BED_path=
# 3. CGmap格式的文件所在路径,精确到文件所在文件夹即可
CGmap_path=
###################################
# step1: cgmaptools bed2fragreg: Split input region into N bins, get fragments from 5' end and 3' end.
# 简单来说就是生成指定宽度的BED格式的fragment染色体坐标文件
#总的来说,需要根据数据来源(WGBS/RRBS)或者位点在这些区域的富集程度,灵活调节可视化区域的上下游长度以及每个bins的宽度(参数-n,-F,-T)
# 注:输入的BED文件要求至少包含4列,即<chr> <start> <end> <strand>
###################################
# 1.适用于输入为某个gene或者某个promoter,而非整个基因组的所有的gene或promoter。
# cgmaptools bed2fragreg -i ${region_BED_path} \
# -n 20 \
# -F 500,500,500,500,500,500,500,500,500,500 \
# -T 500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500 \
# -o bed2fragreg_BinWidth500.bed
# 2.适用于输入的BED文件为整个基因组上所有的gene,promoter,CGI等等
cgmaptools bed2fragreg -i ${region_BED_path} \
-n 100 \
-F 300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300 \
-T 300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300 \
-o ${output_path}/cgmaptools_bed2fragreg_BinWidth300.bed
###################################
# step2: cgmaptools mfg计算样本在上一步获得的所有fragment的甲基化水平
###################################
for CGmap_filename in $(ls ${CGmap_path} | grep ".CGmap");do
prefix=$(echo ${CGmap_filename} | awk -F '.CGmap' '{print $1}')
cgmaptools mfg -i ${CGmap_path}/${CGmap_filename} \
-r ${output_path}/cgmaptools_bed2fragreg_BinWidth300.bed \
-c 5 -C 500 \
-x CG > ${output_path}/${prefix}.mfg
done
# default parameter:
# -c Int, minimum Coverage [Default: 5]
# -C Int, maximum Coverage [Default: 500]
###################################
# step3:合并多样本在不同fragment的甲基化水平为一个矩阵
###################################
first_filename=`$(ls ${output_path} | grep ".mfg" | head -1)`
(head -1 ${output_path}/${first_filename} | awk -F "\t" -v OFS="\t" '{$1="Sample"; print $0;}';
for mfg_file in *.mfg;do
cat ${mfg_file} | awk -F "\t" -v OFS="\t" -v SampleName=$(echo ${mfg_file} | sed s/.mfg//g) '/total_ave_mC/{$1=SampleName;print $0}'
done
) > mfg_merge.xls
###################################
# step4: cgmaptools fragreg将mfg得到的结果进行可视化
###################################
cgmaptools fragreg -i mfg_merge.xls --ratio=3 -f pdf -o meth_fragment_merge_multi_sample.pdf
# -r RATIO, --ratio=RATIO:[opt] range ratio between target region and flanking region in plot. [default: 5],值越大,在结果图的横坐标,target regions占比越多,flanking region占比越少
version3
特点:输入为多个bed格式文件,以绘制多种基因组区域的这种图。
步骤1:cgmaptools bed2fragreg不在循环里面,需要提前执行,生成多个用于可视化的region(划分为fragment的BED文件)。 注意,输入的BED文件格式为:
步骤2:其它步骤使用两个循环,分别遍历所有region的BED文件和所有样本的CGmap文件,计算并出图。
步骤1:使用如下的脚本(cgmaptools_bed2fragreg.sh)将输入的bed格式的region划分为指定长度和宽度的windows。
usage:bash cgmaptools_bed2fragreg.sh
#!/bin/bash
# 目的:cgmaptools bed2fragreg命令切割region及其上下游区域
# 输入的BED文件所在路径
# 注意:BED文件格式为:<chr> <start> <end> <strand>
region_BED_path=${1}
# cgmaptools bed2fragreg命令输出文件路径
bed2fragreg_path=${2}
# 我的参数:
# 1. region这个区域均匀分割为100个Windows;
# 2. regions的上下游区域长度均为5kb,均匀分割为20个Windows;
for bed_file in $(ls ${region_BED_path} | grep ".bed");do
region_type=$(echo ${bed_file} | awk -F ".bed" '{print $1}')
cgmaptools bed2fragreg -i ${region_BED_path}/${bed_file} \
-n 100 \
-F 250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250 \
-T 250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250 \
-o ${bed2fragreg_path}/${region_type}_n100ud5kbF250T250.bed
done
步骤2
#!/bin/bash
############################################
# cgmaptools fragreg
# Description: Plot methylation dynamics of target and flanking region for multiple samples,如gene body及其附件区域的甲基化水平
# author: Zhiwei Lian
# date: 2021.08.23
# 注:cgmaptools v0.1.2的大部分模块依赖于python2,所以需要在python2的Linux环境下运行。
############################################
###################################
# 传入参数
###################################
# 1. 运行结果和运行过程产生的文件保存路径
output_path=${1}
# 2. 步骤1(cgmaptools bed2fragreg)划分bed为window的输出文件所在路径
region_frag_Bed_path=${2}
# 3. CGmap格式的文件所在路径,精确到文件所在文件夹即可
CGmap_path=${3}
###################################
# 嵌套循环执行cgmaptools的两个命令
###################################
# 第一个循环,遍历文件夹下所有需要可视化的fragment的BED文件
for frag_BED in $(ls ${region_frag_Bed_path} | grep ".bed");do
# 第二个for循环,遍历文件夹下所有样本的CGmap文件
for CGmap_filename in $(ls ${CGmap_path} | grep ".CGmap");do
# step2: cgmaptools mfg计算多个样本在上一步获得的所有fragment的甲基化水平
prefix=$(echo ${CGmap_filename} | awk -F '.CGmap' '{print $1}')
cgmaptools mfg -i ${CGmap_path}/${CGmap_filename} -r ${region_frag_Bed_path}/${frag_BED} -c 5 -C 500 -x CG >${output_path}/${prefix}.mfg
done
# step3:合并多样本在不同fragment的甲基化水平为一个矩阵
first_filename=$(ls ${output_path} | grep ".mfg" | head -1)
(head -1 ${output_path}/${first_filename} | awk -F "\t" -v OFS="\t" '{$1="Sample"; print $0;}';
for mfg_file in $(ls ${output_path} | grep ".mfg");do
cat ${output_path}/${mfg_file} | awk -F "\t" -v OFS="\t" -v SampleName=$(echo ${mfg_file} | sed s/.mfg//g) '/total_ave_mC/{$1=SampleName;print $0}'
done) >mfg_merge_${frag_BED}.xls
rm ${output_path}/*.mfg
# step4: cgmaptools fragreg将mfg得到的结果进行可视化
cgmaptools fragreg -i mfg_merge_${frag_BED}.xls --ratio=3 -f pdf -o meth_frag_${frag_BED}.pdf
done
不知为何,某次运行此脚本把运行的命令也添加到输出文件了,如下图:
于是使用sed删除第五行:
for mfg in $(ls tmp/ | grep "mfg_mer");do sed '5d' tmp/${mfg} >${mfg}; done
# 注:tmp下保存着截图出错的文件
分步骤
绘制这幅图不容易,需要分成几个步骤,代码及其说明分别如下:
step1:准备bed格式的基因及其上下游区域
cgmaptools bed2fragreg
使用说明书:
Usage: cgmaptools bed2fragreg [-i <BED>] [-n <N>] [-F <50,50,..> -T <50,..>] [-o output]
(aka FragRegFromBED)
Description: Generate fragmented regions from BED file.
Split input region into N bins, get fragments from 5' end and 3' end.
Input Ex:
chr1 1000 2000 +
chr2 9000 8000 -
Output Ex:
chr1 + 940 950 1000 1200 1400 1600 1800 1850
chr2 - 9060 9050 9000 8800 8600 8400 8200 8150
可选参数:
- -i FILE BED format, STDIN if omitted
- -F INT_list List of region lengths in upstream of 5’ end, Ex: 10,50. List is from 5’end->3’end
- -T INT_list List of region lengths in downstream of 3’ end, Ex: 40,20. List is from 5’end->3’end
- -n INT Number of bins to be equally split [Default:1];【这里等长分割的数目是指你输入的bed文件的start到end这一段区域划分为的bins数目,也就是target regions】
- -o OUTFILE To standard output if omitted. Compressed output if end with
实战代码
示例基因“TCL1A”,长度为8,178个碱基,只放这四列,正负链对最终出图有影响,可通过IGV等方式查看基因的正负链信息。
cat gene-TCL1A.bed
# chr14 96176284 96180462
cgmaptools bed2fragreg -i gene-TCL1A.bed \
-n 80 \
-F 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100 \
-T 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100 \
-o bed2fragreg_gene-TCL1A.bed
cgmaptools mfg
step2:使用”cgmaptools mfg” 研究片段化区域中的甲基化(methylation fragment)
本质:计算样本在上一条命令划分的每个fragment的甲基化水平
软件:cgmaptools mfg
使用说明(Version: 0.1.2)
Usage: cgmaptools mfg [-i <CGmap>] -r <region> [-c 5 -C 500]
Description: Calculated methylation profile across fragmented regions.
Contact: Guo, Weilong; guoweilong@126.com
Last Update: 2017-01-20
Options:
-i String, CGmap file; use STDIN if not specified
Please use "gunzip -c <input>.gz " and pipe as input for gzipped file.
chr1 G 851 CHH CC 0.1 1 10
-r String, Region file, at least 4 columns
Format: chr strand pos_1 pos_2 pos_3 ...
Regions would be considered as [pos_1, pos_2), [pos_2, pos_3)
Strand information will be used for distinguish sense/antisense strand
Ex:
#chr strand U1 R1 R2 D1 End
chr1 + 600 700 800 900 950
chr1 - 1600 1500 1400 1300 1250
-c Int, minimum Coverage [Default: 5]
-C Int, maximum Coverage [Default: 500]
Sites exceed the coverage range will be discarded
-x String, context [use all sites by default]
string can be CG, CH, CHG, CHH, CA, CC, CT, CW
-h help
Output to STDOUT:
Region_ID U1 R1 R2 D1
sense_ave_mC 0.50 0.40 0.30 0.20
sense_sum_mC 5.0 4.0 3.0 2.0
sense_sum_NO 10 10 10 10
anti_ave_mC 0.40 0.20 0.10 NaN
anti_sum_mC 8.0 4.0 2.0 0.0
anti_sum_NO 20 20 20 0
total_ave_mC 0.43 0.27 0.17 0.2
total_sum_mC 13.0 8.0 5.0 2.0
total_sum_NO 30 30 30 10
批量运行代码
inut_CGmap1=/mnt/MD3400/data003/lianzhiwei/01project/03WGBS_ALL/result/Meth_Level_dynamics/cgmaptools_plot/input_bismark2CGmap
# WGBS测序获得的位点数目达千万级别,但计算使用到的染色体区域只有一部分,为了提高运行速率,提取需要用到的那条染色体上的位点
for input_filename in $(ls ${inut_CGmap1} | grep ".CGmap");do
prefix=$(echo ${input_filename} | awk -F '.CGmap' '{print $1}')
cat ${inut_CGmap1}/${input_filename} | grep chr14 >${prefix}.TCL1A.CGmap
done
inut_CGmap2=/mnt/MD3400/data003/lianzhiwei/01project/03WGBS_ALL/result/Meth_Level_dynamics/cgmaptools_plot/gene_MethLevel_20210503/gene-TCL1A/filtered_CGmap
for input_filename in $(ls ${inut_CGmap2} | grep ".CGmap");do
prefix=$(echo ${input_filename} | awk -F '.CGmap' '{print $1}')
cgmaptools mfg -i ${inut_CGmap2}/${input_filename} \
-r /mnt/MD3400/data003/lianzhiwei/01project/03WGBS_ALL/result/Meth_Level_dynamics/cgmaptools_plot/gene_MethLevel_20210503/gene-TCL1A/bed2fragreg_gene-TCL1A.bed \
-c 5 \
-C 500 \
-x CG > ${prefix}.mfg
done
# default parameter:
# -c Int, minimum Coverage [Default: 5]
# -C Int, maximum Coverage [Default: 500]
# Sites exceed the coverage range will be discarded
# -x String, context [use all sites by default]
# string can be CG, CH, CHG, CHH, CA, CC, CT, CW
merge mfg
step3:合并多个样本的methylation fragment(mfg)文件为一个矩阵格式。
这一步没有轮子,这是作者提供的合并代码,自己也可以写
# tips1:从任意一个methylation fragment文件中获取表头并把第一个字段修改为”Sample”;如文件Sample_1.mfg
# tips2:提取出样本在每个fragment的平均甲基化的那行(total_ave_mC),并把样本名作为行名
# tips3:这里的文件名命名采用的是sed命令替换,可以按需修改替换的字符串
(head -1 H1-diagnosis.chr14.mfg | awk -F "\t" -v OFS="\t" '{$1="Sample"; print $0;}';
for mfg_file in *.mfg; do
cat ${mfg_file} | awk -F "\t" -v OFS="\t" -v SampleName=$(echo ${mfg_file} | sed s/.chr14.mfg//g) '/total_ave_mC/{$1=SampleName;print $0}'
done
) > mfg_merge.xls
cgmaptools fragreg
step4:使用cgmaptools fragreg将mfg得到的结果进行可视化
cgmaptools fragreg —help
# Description: Plot methylation dynamics of target and flanking region for multiple samples
# -r RATIO, —ratio=RATIO:[opt] range ratio between target region and flanking region in plot. [default: 5],值越大,在结果图的横坐标,target regions占比越多,flanking region占比越少
# 可视化多个样本
cgmaptools fragreg -i mfg_merge.xls --ratio=2 -f pdf -o meth_fragment_merge_multi_sample.pdf
# 可视化单个样本,一般不需要
cgmaptools fragreg -i Sample_1.mfg -f pdf -o test_1.pdf
绘制目标图形的几个步骤已经完成,接下来需要做的是修图。
报错合集
- 绘图需要的R包没安装
cgmaptools fragreg需要调用当前环境下的R来绘图,如果当前环境没有绘图需要的R包,如这里报错显示R包optparse没安装,只能先安装好R包,再运行cgmaptools fragreg绘图。
但是如果前面几步完成了,用于绘图的矩阵文件也就有了(mfg_merge.xls),下一步是使用cgmaptools fragreg的绘图源代码进行绘图。
ps:因为cgmaptools fragreg 命令绘图结果不会对图中的折线按照分组进行上色,而是每一个样本一条不同颜色的曲线,如果输入样本里面分为不同组别,一组内有多个样本,那么cgmaptools fragreg 命令出图结果就不可用了。如下图:
遇到这种情况,就要重新自己使用矩阵绘图。
问题:软件原始代码绘制的图分组上色可能不合理,需要手动调整cgmaptools在GitHub上的绘制此图的R代码。
cgmaptools fragreg这个shell命令行下使用的绘图命令实际上依赖于,其R源代码可获取于可获取于:https://github.com/guoweilong/cgmaptools/blob/master/src/mCFragRegView.R
cgmaptools fragreg的源代码经过修改后可适用于分组显示的R代码:
修改cgmaptools绘图函数源码_input_methylationFragment矩阵.R
目的:修改cgmaptools绘图函数源码_input_methylationFragment矩阵
后期搭配AI、PS等工具的使用即可获得一张可发表的图形。
优化与修图
- 修图是什么意思呢?
理想很丰满,我们都希望绘制的图形一次就能达到满意效果,但是现实上,你的数据和参数往往给你一个惊喜。
比如下图
为何每个样本的甲基化水平没有连成线?原因可能有二:
一是样本检测到的位点数目太少,导致划分bins的区域没有位点所以该区域为NA,线就连不上;
二是划分bins时bins的宽度太窄,导致很多bins没有位点所以该区域为NA,线就连不上;
然后解决办法是,多测试参数,放宽或缩小参数。
- 优化
有时间按照这种格式绘图,方法是将cgmaptools输出的mfg文件拼接起来,再使用cgmaptools fragreg命令绘图