2016-05-03 4 views
0

私はBioconductorのggtreeパッケージを使用して2つの系統樹をプロットしています。基本的にはggplot2のように機能し、外部のCSVファイルで設定されたクラスに合わせてtipラベルの美しさを変更したいと考えています。系統樹に外部データを注釈しますか?

私は、同じ50遺伝子の2つの異なるクラスタリングを含むmultiPhyloオブジェクトを持っています(この例では6つのふりをします)。私がmultitree[[1]]$tip.labelmultitree[[2]]$tip.labelを評価するとき、彼らは私に同じ順序で同じリストを与えるので、プロットが異なって表示されている間に、遺伝子は同じ順序で保存されます。

library(ggtree) 
library(ape) 

mat <- as.dist(matrix(data = rexp(200, rate = 10), nrow = 6, ncol = 6)) 
nj.tree <- nj(mat) ### Package ape 
hclust.tree <- as.phylo(hclust(mat)) 
multitree <- c(nj.tree, hclust.tree) 

Iは、これらのツリーをプロットした後、それらは既存の文献に記載されている5つのクラス(A、B、C、D、及びE)のどちらに基づいて外部データとそれらを注釈します。

write.csv(multitree[[1]]$tip.label, "Genes.csv") 

このコマンドを使用して、各遺伝子の正しい順番でCSVファイルを作成しました(該当するかどうかはわかりません)。私は手動で各遺伝子に隣接する列に対応するクラスレターを手動で入力しました。これは次のようになります。

Gene Class 
1  A 
2  A 
3  D 
4  C 
5  B 
6  E 

などです。

外部CSVテーブルで定義されている色に対応するように、ツリー上のチップラベルの色に注釈を付ける必要があります。私はそれがgeom_tiplab(aes(color=something something something))のように見えるだろうと知っていますが、それは私のCSV内のデータを読み取るようにする方法を知らないで、multitreeのデータではありません。私のggtreeコマンドの外観は次のとおりです

myTree <- ggtree(multitree[[i]], aes(x, y)) + 
    ggtitle(names(multitree)[i]) + 
    geom_tiplab() + ### What I want to annotate with color 
    theme_tree2() + 
    coord_fixed(ratio = 0.5) 
print(myTree)   ###Occurs within a for loop, forces ggplot output to display 
+0

CSVファイルサンプル(Gene、Class)の値は、 'multitree [$ 1] $ tip.label'の値にどのように対応していますか?それらの間に一致する値はありません。 – eipi10

+0

CSVファイルの遺伝子名はtip.labelの名前から直接出力されます。つまり、彼らは名前の順序と同じ名前を持っていることを意味します。各遺伝子がどのクラスに属しているかに関する情報を外部に追加することができる他の方法はありますか? –

+0

あなたの例では 'multitree [[1]] $ tip.label'は1から50までの値を持っています。CSVの例ではそのような値はありませんので、' tip.label'がどの行をCSVファイル?また、5つまたは6つのチップラベルを作成し、「tip.label」と「Class」をマッチさせた(CSVファイルに類似した)データフレームを作成した場合に役立ちます – eipi10

答えて

0

テーブルからクラス名のカラーベクトルを作成します。

g <- read.csv("Genes.csv") 
cols <- rainbow(nlevels(g$Class)) 

# Function to identify class color for a certain gene 
findCol <- function(x){ 
    col <- switch(as.character(x), A=cols[1], B=cols[2], C=cols[3], D=cols[4], E=cols[5]) 
    return(col) 
} 
col.vect <- sapply(g$Class, findCol) 

geom_tiplab()機能でこのベクターを使用してください。

+1

こんにちは、ありがとう!私は実際にBioconductorの 'ggtree'パッケージの'%<+% '演算子を使って、それを行う別の方法を見つけました。外部データファイルを既存のggplotにコピーしてから、その外部テーブルを使ってグラフィックスを操作してください。 –

関連する問題