- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在通过 genoPlotR
R
包生成一个 plot_gene_map
图,它给出了一个水平的系统发育树,其中与每片叶子对齐的是基因组片段。
这是一个说明我的用法和问题的简单示例:
plot_gene_map
函数需要一个 ade4
的包 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
的 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)
函数的调用是:
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)
给出:
如您所见,顶部和右侧的框(基因)名称被截断了。
我尝试使用 pdf
的 width
和 height
,将图形保存到文件时,边距通过 par
的 mar
,但它们没有任何效果。
目前 genoPlotR
的 plot_gene_map
没有实现 legend
选项。知道如何添加图例,假设在这些标签旁边的正方形中显示这些颜色:
data.frame(label = c("A","B","C","D","E"), color = c("red","blue","green","yellow ","橙色"))
最佳答案
很高兴您喜欢 genoPlotR。
您的问题没有真正优雅的解决方案,但您可以尝试以下几种方法: - 增加 annotation_height 并减少 annotation_cex - 在注释功能中增加旋转(“rot”) - 使用 xlims 人为地增加 dna_seg 的长度(但这是一个糟糕的 hack)
对于其余部分(包括图例),您必须使用网格及其视口(viewport)。
前 3 种解决方案的混合:
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()
希望对您有所帮助!
莱昂内尔
关于r - 控制 genoPlotR plot_gene_map 中的边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55157846/
我正在通过 genoPlotR R 包生成一个 plot_gene_map 图,它给出了一个水平的系统发育树,其中与每片叶子对齐的是基因组片段。 这是一个说明我的用法和问题的简单示例: plot_ge
我是一名优秀的程序员,十分优秀!