Как я могу нанести цветные метки подсказок в ggtree, не включая их в легенду?

Я пытался построить дерево с цветными ветвями и подсказками, используя пакет ggtree в R. Вот пример кода, использующего дерево ящериц Anolis.

library(ggtree);library(tidyverse);library(ape)
anole.tree<-read.tree("http://www.phytools.org/eqg2015/data/anole.tre")
svl <- read.csv("http://www.phytools.org/eqg2015/data/svl.csv",row.names=1)
cls<-list(clade1=c("baleatus","barahonae","ricordii","eugenegrahami","christophei","cuvieri"),
          clade2=subset(anole.tree$tip.label,!(anole.tree$tip.label %in% c("baleatus","barahonae","ricordii","eugenegrahami","christophei","cuveri"))))
anole.tree_new<-groupOTU(anole.tree,.node=cls)
ggtree(anole.tree_new,layout="circular",ladderize=TRUE)+
  geom_tree(aes(color=group))+
  scale_color_manual(values=c("blue","red"))+
  geom_tiplab(size=0.8,aes(color=group))+
  theme(legend.position = c(0.9, 1),
        legend.justification = c(0,1),
    legend.title=element_text(size=7),legend.text=element_text(size=7))

Проблема, с которой я столкнулся, заключается в том, что полученный график включает текстовый элемент (маленький a) как часть легенды. Мне не удалось понять, как убрать этот текстовый элемент из легенды. Я хочу сохранить саму легенду, но не хочу, чтобы красный и синий a были нанесены рядом с красной и синей линиями в приведенном выше примере.

Обычно это было бы так просто, как не устанавливать аргумент цвета как aes в метках элементов (geom_tiplab). Однако, если я не назову групповой цвет под aes ...

ggtree(anole.tree_new,layout="circular",ladderize=TRUE)+
  geom_tree(aes(color=group))+
  scale_color_manual(values=c("blue","red"))+
  geom_tiplab(size=0.8,color=group)+
  theme(legend.position = c(0.9, 1),
        legend.justification = c(0,1),
        legend.title=element_text(size=7),legend.text=element_text(size=7))

Я получаю сообщение об ошибке, что группа объектов не найдена. Так что это не так просто, как в обычном ggplot.


person user2352714    schedule 05.04.2021    source источник
comment
использование параметра guide = FALSE в scale_color_manual удалит его из легенды.   -  person Sinh Nguyen    schedule 05.04.2021
comment
@SinhNguyen Это просто убирает всю легенду. Я хочу сохранить легенду, но удалить текст из символа легенды. То есть, в приведенном примере я хочу удалить маленькие красные и синие a, которые нанесены рядом с синей и красной линиями, но сохранить эти линии.   -  person user2352714    schedule 05.04.2021


Ответы (2)


Вы можете удалить добавление эстетики к легенде из любого geom (по крайней мере, я думаю, из любого geom), установив логическое значение show.legend в этом вызове geom. Итак, show.legend = FALSE, похоже, помогает мне:

ggtree(anole.tree_new,layout="circular",ladderize=TRUE)+
  geom_tree(aes(color=group))+
  scale_color_manual(values=c("blue","red"))+
  geom_tiplab(size=0.8,aes(color=group), show.legend=FALSE)+
  theme(legend.position = c(0.9, 1),
        legend.justification = c(0,1),
        legend.title=element_text(size=7),legend.text=element_text(size=7))

введите описание изображения здесь

В качестве альтернативы вы можете сделать это без использования show.legend, если хотите, переопределив эстетику легенды. В этом случае вам нужно превратить все метки в пустую строку, чтобы метка, показанная в легенде, была просто "". Вы можете сделать это с помощью guides():

# add the following to your plot code
guides(color=guide_legend(override.aes = list(label="")))
person chemdork123    schedule 05.04.2021

Вы можете настроить текст легенды var label в scale_color_manual() с помощью этого кода: label=c("whatever you want","more what ever")

ggtree(anole.tree_new,layout="circular",ladderize=TRUE)+
  geom_tree(aes(color=group))+
  scale_color_manual(values=c("blue","red"), label=c("whatever you want","more what ever"))+
  geom_tiplab(size=0.8,aes(color=group))+
  theme(legend.position = c(0.9, 1),
        legend.justification = c(0,1),
        legend.title=element_text(size=22),legend.text=element_text(size=22))

введите описание изображения здесь

person TarJae    schedule 05.04.2021