控制genoPlotR plot_gene_map中的边距

时间:2019-03-14 08:22:55

标签: r pdf plot margin legend

我正在通过plot_gene_map genoPlotR软件包生成一个R图形,它提供了一个水平的系统发育树,其中与每片叶子对齐的是一个基因组片段。

这是一个简单的例子,说明了我的用法和问题:

plot_gene_map函数需要一个ade4 s'包phylog对象,该对象表示系统树:

tree <- ade4::newick2phylog("(((A:0.08,B:0.075):0.028,(C:0.06,D:0.06):0.05):0.0055,E:0.1);")

genoPlotR的{​​{1}}对象组成的列表(本质上是具有特定列的dna_seg),其中列表元素的名称必须与的叶子名称匹配data.frame

tree

还有dna.segs.list <- list(A=genoPlotR::as.dna_seg(data.frame(name=paste0("VERY.LONG.NAME.A.",1:10),start=seq(1,91,10),end=seq(5,95,10),strand=1,col="black",ly=1,lwd=1,pch=1,cex=1,gene_type="blocks",fill="red")), B=genoPlotR::as.dna_seg(data.frame(name=paste0("VERY.LONG.NAME.B.",1:10),start=seq(1,91,10),end=seq(5,95,10),strand=1,col="black",ly=1,lwd=1,pch=1,cex=1,gene_type="blocks",fill="blue")), C=genoPlotR::as.dna_seg(data.frame(name=paste0("VERY.LONG.NAME.C.",1:10),start=seq(1,91,10),end=seq(5,95,10),strand=1,col="black",ly=1,lwd=1,pch=1,cex=1,gene_type="blocks",fill="green")), D=genoPlotR::as.dna_seg(data.frame(name=paste0("VERY.LONG.NAME.D.",1:10),start=seq(1,91,10),end=seq(5,95,10),strand=1,col="black",ly=1,lwd=1,pch=1,cex=1,gene_type="blocks",fill="yellow")), E=genoPlotR::as.dna_seg(data.frame(name=paste0("VERY.LONG.NAME.E.",1:10),start=seq(1,91,10),end=seq(5,95,10),strand=1,col="black",ly=1,lwd=1,pch=1,cex=1,gene_type="blocks",fill="orange"))) genoPlotR对象的列表,这些对象提供坐标信息,也根据annotation的叶子来命名:

tree

该函数的调用是:

annotation.list <- lapply(1:5,function(s){
  mids <- genoPlotR::middle(dna.segs.list[[s]])
  return(genoPlotR::annotation(x1=mids,x2=NA,text=dna.segs.list[[s]]$name,rot=30,col="black"))
})
names(annotation.list) <- names(dna.segs.list)

哪个给:

enter image description here

如您所见,顶部和右侧框(基因)的名称被切断。

在将图形保存到文件中时,我尝试使用genoPlotR::plot_gene_map(dna_segs=dna.segs.list,tree=tree,tree_width=2,annotations=annotation.list,annotation_height=1.3,annotation_cex=0.9,scale=F,dna_seg_scale=F) 的{​​{1}}和pdf,并通过width的{​​{1} },但没有效果。

  1. 有什么主意如何在不切断名称的情况下显示该图吗?
  2. 当前height的{​​{1}}未实现par选项。知道如何添加图例,假设这些图例在这些标签旁边以正方形显示了这些颜色:

    data.frame(标签= c(“ A”,“ B”,“ C”,“ D”,“ E”),颜色= c(“红色”,“蓝色”,“绿色”,“黄色“,” orange“))

2 个答案:

答案 0 :(得分:1)

很高兴您喜欢genoPlotR。

对于您的问题,没有真正优雅的解决方案,但是您可以尝试以下一些操作:  -增加注解高度并减少注解  -增加注释功能中的旋转(“ rot”)  -使用xlims人为地增加dna_seg的长度(但这是一个糟糕的技巧)

对于其余部分(包括图例),您将不得不使用grid及其视口。

前三种解决方案的组合:

annotation.list <- lapply(1:5,function(s){
  mids <- genoPlotR::middle(dna.segs.list[[s]])
  return(genoPlotR::annotation(x1=mids, x2=NA, text=dna.segs.list[[s]]$name,rot=75,col="black"))
})
names(annotation.list) <- names(dna.segs.list)
genoPlotR::plot_gene_map(dna_segs=dna.segs.list,tree=tree,tree_width=2,annotations=annotation.list,annotation_height=5,annotation_cex=0.4,scale=F,dna_seg_scale=F, xlims=rep(list(c(0,110)),5))

对于网格的更好解决方案:(请注意对plot_gene_map的调用中的“ plot_new = FALSE”)

# changing rot to 30
annotation.list <- lapply(1:5,function(s){
 mids <- genoPlotR::middle(dna.segs.list[[s]])
return(genoPlotR::annotation(x1=mids,x2=NA,text=dna.segs.list[[s]]$name,rot=30,col="black"))
})
names(annotation.list) <- names(dna.segs.list)


# main viewport: two columns, relative widths 1 and 0.3
pushViewport(viewport(layout=grid.layout(1,2, widths=unit(c(1, 0.3), rep("null", 2))), name="overall_vp"))
# viewport with gene_map
pushViewport(viewport(layout.pos.col=1, name="geneMap"))
genoPlotR::plot_gene_map(dna_segs=dna.segs.list,tree=tree,tree_width=2,annotations=annotation.list,annotation_height=3,annotation_cex=0.5,scale=F,dna_seg_scale=F, plot_new=FALSE)
upViewport()
# another viewport for the margin/legend
pushViewport(viewport(layout.pos.col=2, name="legend"))
plotLegend(…)
upViewport()

希望有帮助!

Lionel

答案 1 :(得分:0)

我可以使用哪个函数或程序包添加图例? R基函数似乎不适用于我。显示以下消息:

strheight中的错误(传奇,单位=“用户”,cex = cex): plot.new尚未被调用“