Давний читатель, впервые спрашивающий!
Итак, у меня есть филогенетическое дерево с 18 кончиками (A-Q) и 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, но с именем «сюжет», а не «SpeciesTree_withBins», и полученное изображение ужасно раздавлено.
Я не знаю, как решить эту проблему. Может ли кто-нибудь помочь мне в экспорте дерева с высоким разрешением, помеченного узлами, которое не сжато (и желательно с правильным именем файла)?
Кажется, это связано с проблемой разрешения. Имейте в виду, что я не смог воспроизвести ваш пример, поэтому я могу немного ошибиться (а именно, я не знаю, откуда взялись функции tree
и Cairo
— я также предположил, что вы используете phytools::to.matrix
).
Ваше решение 2 работает хорошо, вы можете изменить имя файла, используя png
, а не Cairo
, и вы можете изменить размеры графика, используя аргументы height
и width
в 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()
Спасибо! Изменение ширины и высоты, кажется, сработало хорошо (вам нужно отредактировать другие параметры дерева, но для этого нужно немного повозиться)! Причина, по которой я использовал Cairo, заключалась в том, что я хотел установить сглаживание, но, по-видимому, вы можете сделать это в функции png(), используя тип аргумента = 'Cairo'. Что касается дерева, то оно было импортировано из файла newick (извините за путаницу!)