Управление полями в genoPlotR plot_gene_map

Я создаю plot_gene_map рисунок с помощью пакета genoPlotRR, который дает горизонтальное филогенетическое дерево, где с каждым листом выровнен геномный сегмент.

Вот простой пример, который иллюстрирует мое использование и проблему:

Для функции plot_gene_map требуется объект ade4s' package 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);")

Список объектов genoPlotRdna_seg (которые по сути являются data.frames с определенными столбцами), где имена элементов списка должны совпадать с именами листьев 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")))

И список объектов genoPlotRannotation, которые дают информацию о координатах, также названных в соответствии с листьями 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)

Который дает:

Управление полями в genoPlotR plot_gene_map

Как вы можете видеть, названия верхней и правой рамок (генов) обрезаны.

Я пробовал играть с pdf и width при сохранении рисунка в файл и с полями через heightpar, но они не дают никакого эффекта.

  1. Любая идея, как отобразить этот график, не обрезая имена?
  2. В настоящее время в margenoPlotR не реализована опция plot_gene_map. Любая идея, как я могу добавить легенду, скажем, которая показывает эти цвета в квадратах рядом с этими метками:

    data.frame(label = c("A","B","C","D","E"), color = c("красный","синий","зеленый","желтый"," апельсин"))

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
346
2

Ответы 2

Рад, что вам нравится genoPlotR.

У вашей проблемы нет действительно элегантного решения, но вот несколько вещей, которые вы можете попробовать: - увеличить annotation_height и уменьшить annotation_cex - увеличить вращение («rot») в функции аннотации - использовать xlims для искусственного увеличения длины dna_seg (но это плохой хак)

Для всего остального (включая легенду) вам придется использовать сетку и ее окна просмотра.

Смесь первых 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_new = FALSE» в вызове plot_gene_map)

# 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 мне не подошли. Отображается следующее сообщение:

Error in strheight(legend, units = "user", cex = cex) : plot.new has not been called yet"

Другие вопросы по теме