Экспортирование филогенетического дерева с высоким разрешением - PullRequest
0 голосов
/ 20 февраля 2019

Многолетний читатель, впервые спрашивающий!

Итак, у меня есть филогенетическое дерево с 18 кончиками (AQ) и 17 внутренними узлами.Внутренние узлы помечены некоторыми цветными пирогами следующим образом:

    plot(tree, cex = 0.8, label.offset= 1)
mbv <- c(1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0)
nodelabels(pie = mbv, piecol = c("black", "white"), cex = 0.8)

trait <- c(0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1)
names(trait)<-tree$tip.label
tiplabels(pie = to.matrix(trait, sort(unique(trait))), piecol = c("black", "white"), 
          cex = 0.4)

Я пытаюсь экспортировать PNG-изображение высокого разрешения или Tiff-изображение этого дерева, но у меня возникли проблемы.

Оригинальный код:

Cairo(filename='SpeciesTree_withBins.png', type="png", res=300)
par(mar=c(1,1,1,1))
{plot(tree, cex = 0.8, label.offset= 1)
mbv <- c(1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0)
nodelabels(pie = mbv, piecol = c("black", "white"), cex = 0.8)
trait <- c(0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1)
names(trait)<-tree$tip.label
tiplabels(pie = to.matrix(trait, sort(unique(trait))), piecol = c("black", "white"), 
          cex = 0.4)}
dev.off()

В результате возникла следующая ошибка:

Error in symbols(xpos, ypos, circles = radius, inches = FALSE, add = TRUE,  : 
  plot.new has not been called yet

Попытка решения 1:

Cairo(filename='SpeciesTree_withBins.png', type="png", res=300)
{plot(tree, cex = 0.8, label.offset= 1)
  mbv <- c(1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0)
  nodelabels(pie = mbv, piecol = c("black", "white"), cex = 0.8)    
  trait <- c(0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1)
  names(trait)<-tree$tip.label
  tiplabels(pie = to.matrix(trait, sort(unique(trait))), piecol = c("black", "white"), 
            cex = 0.4)}
dev.off()

Что дало мнедругая ошибка:

 Error in plot.new() : figure margins too large 

Попытка решения 2:

Cairo(filename='SpeciesTree_withBins.png', type="png", res=300)
par(mar=c(1,1,1,1))
{plot(tree, cex = 0.8, label.offset= 1)
mbv <- c(1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0)
nodelabels(pie = mbv, piecol = c("black", "white"), cex = 0.8)
trait <- c(0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1)
names(trait)<-tree$tip.label
tiplabels(pie = to.matrix(trait, sort(unique(trait))), piecol = c("black", "white"), 
          cex = 0.4)}
dev.off()

При этом был получен PNG, но с именем 'plot', а не с 'SpeciesTree_withBins', и полученное изображение ужасно сжато,

Squashedplot

Я не уверен, как решить эту проблему.Может ли кто-нибудь помочь мне экспортировать дерево с меткой узла в высоком разрешении, которое не сжимается (и желательно с правильным именем файла)?

1 Ответ

0 голосов
/ 22 февраля 2019

Это, похоже, связано с проблемой разрешения.Имейте в виду, что я не смог воспроизвести ваш пример, поэтому я могу быть немного не в курсе (а именно, я не знаю, откуда взялись функции tree и Cairo - я также предположил, что вы используете phytools::to.matrix).

Ваше решение 2, кажется, работает хорошо, вы можете изменить имя файла, используя png вместо Cairo, и вы можете изменить размеры графика, используя height и * 1009.* аргументы в png:

library(ape)
library(phytools)
## Making a random tree
tree <- rtree(18)

## Setting up the png output file
## you might want to change the width and height here!
png(filename = "SpeciesTree_withBins.png", res = 300,
    width = 800, height = 800)

## The margin definition
par(mar = c(1,1,1,1))

## Some tree parameters
mbv <- c(1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0)
trait <- c(0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1)
names(trait) <- tree$tip.label

## Plotting the tree
plot(tree, cex = 0.8, label.offset= 1)
nodelabels(pie = mbv, piecol = c("black", "white"), cex = 0.8)
tiplabels(pie = to.matrix(trait, sort(unique(trait))),
                          piecol = c("black", "white"),cex = 0.4)

## Saving the file
dev.off()
...