Saya telah mencoba memplot pohon dengan cabang dan ujung berkode warna menggunakan paket ggtree di R. Berikut adalah contoh kode menggunakan pohon kadal 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))

Masalah yang saya alami dengan ini adalah bahwa plot yang dihasilkan menyertakan elemen teks ("a") kecil sebagai bagian dari legenda. Saya tidak dapat menemukan cara untuk menghilangkan elemen teks ini dari legenda. Saya ingin menyimpan legenda itu sendiri tetapi saya tidak ingin "a" merah dan biru yang diplot di samping garis merah dan biru pada contoh di atas.

Biasanya akan sesederhana tidak mengatur argumen warna menjadi aes dalam label elemen (geom_tiplab). Namun, jika saya tidak memanggil warna grup di bawah 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))

Saya mendapatkan pesan kesalahan yang mengatakan objek "grup" tidak ditemukan. Jadi sepertinya tidak semudah di ggplot normal.

1
user2352714 5 April 2021, 08:13

2 jawaban

Jawaban Terbaik

Anda dapat menghapus penambahan estetika ke legenda dari geom mana pun (setidaknya, menurut saya geom apa pun) dengan menyetel boolean show.legend di dalam panggilan geom itu. Jadi, show.legend = FALSE sepertinya berhasil untuk saya:

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))

enter image description here

Atau, Anda dapat melakukan ini tanpa menggunakan show.legend jika Anda mau dengan mengesampingkan estetika legenda. Dalam hal ini, Anda ingin mengubah semua label menjadi string kosong, sehingga label yang ditampilkan pada legenda hanya "". Anda dapat melakukannya melalui guides():

# add the following to your plot code
guides(color=guide_legend(override.aes = list(label="")))
2
chemdork123 5 April 2021, 17:04

Anda dapat mengubah teks label var legenda di scale_color_manual() dengan kode ini: 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))

enter image description here

0
TarJae 5 April 2021, 17:10