質問:
同じ順序の遺伝子で2つのヒートマップをプロットする
Exhausted
2018-07-04 20:23:37 UTC
view on stackexchange narkive permalink

同じパターンを期待していましたが、遺伝子の順序が同じではないように見えるため、ここではパターンを比較できません。つまり、遺伝子の順序が同じである2つのヒートマップを作成して、2つのヒートマップで黄色と青色のブロックを比較できるようにする方法です。

このコードを使用しました

  require( "RColorBrewer")myCol <- colorRampPalette(c( "dodgerblue"、 "black"、 "yellow"))(100)myBreaks <- seq(-2、2、length。 out = 101)heat <- t(scale(t(sc_DEGG)))hr <- hclust(as.dist(1-cor(t(y​​)、method = "pearson"))、method = "complete")heatmap .2(heat、Rowv = as.dendrogram(hr)、Colv = as.dendrogram(hc)、col = myCol、breaks = myBreaks、main = "Title"、key = T、keysize = 1.0、scale = "none" 、density.info = "none"、reorderfun = function(d、w)reorder(d、w、agglo.FUN = mean)、trace = "none"、cexRow = 0.2、cexCol = 0.8、distfun = function(x) dist(x、method = "euclidean")、hclustfun = function(x)hclust(x、method = "ward.D2")) 
コードには「コード」形式を使用してください。読みやすくなります。そして、リンクではなくテキストに直接画像を配置してみてください。
ここのMWEコードは機能しません。変数 `y`と` hc`は、 `sc_DEGG`が未公開の遺伝子xサンプル/セルマトリックスであると仮定しても、定義されていません。
三 答え:
sjcockell
2018-07-05 19:40:02 UTC
view on stackexchange narkive permalink

ComplexHeatmapは、同じクラスタリングでヒートマップを並べてプロットするために構築されています。ggplot2と同様に、 + 表記を使用します。 @ b.notaと同じサンプルデータを使用するには:

  library(ComplexHeatmap)#First matrixset.seed(2)m <-replicate(8、rnorm( 26))rownames(m)<-letters [1:26]#2番目のmatrixset.seed(3)m2 <-replicate(8、rnorm(26))rownames(m2)<-letters [1:26] Heatmap(m )+ヒートマップ(m2) 

そして結果:

ComplexHeatmap Results

例はたくさんあります広範なドキュメントにあります。

編集:

カラースキームを変更するには、 colorRamp2 関数を呼び出す必要があります。 >循環パッケージ。

  library(circlize)mycol <- colorRamp2(c(-2,0,2)、c( "dodgerblue"、 "black"、 "yellow"))Heatmap(m、col = mycol、cluster_columns = FALSE)+ Heatmap(m2、col = mycol、cluster_columns = FALSE) 

これにより、次のようになります。

enter image description here

素晴らしい解決策!
@FereshTeh列のクラスタリングをオフにすることができます-`cluster_columns = FALSE`、その場合、順序は入力行列と同じになります。色については、ComplexHeatmapでどのように機能するかを示す2番目の例を含めました(「breaks」の例とは少し異なります)。
@FereshTeh colorRamp2呼び出しの番号範囲は、データによって通知される必要があります。たとえば、range()を使用して最小値と最大値を取得できます。
@FereshTehこれはおそらく別の質問であるという領域に向かっていると思います。 'T'マトリックスに高い値を持つ遺伝子がいくつかあるため、残りのヒートマップの配色が洗い流されています。 maxを低く設定し、それらの遺伝子が飽和することを受け入れることができます。結果として得られるヒートマップは、データに対して「正直」ではなくなりますが、見たいものをキャプチャする可能性があります。
申し訳ありませんが、complexheatmapパッケージのコードに基づいてヒートマップのペアを作成しました。右のヒートマップは左のヒートマップよりも明るいです。どちらがもう一方に基づいてクラスター化されているのかわかりません。正しい方を暗くして、両方がより似ているようにするにはどうすればよいですか? https://image.ibb.co/fbhVGo/Rplot311.png
これは新しい質問だと思います。
benn
2018-07-04 23:36:32 UTC
view on stackexchange narkive permalink

遺伝子の順序は両方のヒートマップで同じであると予想しますが、4000個の遺伝子が正確に同じ順序でクラスター化される可能性は低いです。

できることは、 1つのヒートマップからの遺伝子(行)の順序と、他のデータセットを使用した新しいヒートマップの作成。もちろん、ツリーはクラスター化されなくなるため、失われます。

ここに小さな例があります:

  library(gplots)#First matrixset.seed(2) m <-replicate(8、rnorm(26))rownames(m)<-letters [1:26] hm <- heatmap.2(m、main = "m"、key = T、keysize = 1.0、scale = " none "、trace =" none "、density.info =" none "、Colv = FALSE、distfun = function(x)dist(x、method =" euclidean ")、hclustfun = function(x)hclust(x、method = "ward.D2"))#2番目のmatrixset.seed(3)m2 <-replicate(8、rnorm(26))rownames(m2)<-letters [1:26] hm2 <- heatmap.2(m2、main = "m2"、key = T、keysize = 1.0、scale = "none"、trace = "none"、density.info = "none"、Colv = FALSE、distfun = function(x)dist(x、method = "euclidean ")、hclustfun = function(x)hclust(x、method =" ward.D2 "))#firstreorder_m2の行順序を持つ2番目の行列<- m2 [rev(hm $ rowInd)、] hm2_m <- heatmap.2(reorder_m2 、メイン= "m2 in m's order"、key = T、keysize = 1.0、scale = "none"、trace = "none"、density.info = "none"、Rowv = FALSE、Colv = FALSE、dendrogram = "none"、 distfun = function(x)dist(x、method = "euclidean")、hclustfun = function(x)hclust(x、method = "ward.D2")) 

m m2 m2_m

@FereshTeh hmは最初のヒートマップの出力です(コードでは異なります)
@Llopis,ええ、それが明らかでない場合は申し訳ありません。 OPは、最初にヒートマップをオブジェクトに保存する必要があります(私の例では `hm <-heatmap.2(...`)。
すみません、データで使用すると、reorder_m2 <-r [rev(hm $ rowInd)、] r [rev(hm $ rowInd)、]のエラー:添え字が範囲外ですが、両方の行列の次元が同じです:(((
申し訳ありませんが、pheatmap(reorder_m2)hclust(d、method = method)のエラー:reorder_m2はnum [0,1:9}だけの行には何もないため、クラスター化するにはn> = 2個のオブジェクトが必要です。
@FereshTeh,は、質問を編集してより多くのコードを含め、これらのエラーが発生した時期を説明できますか?
`hmrowInd`または` hm $ rowInd`を使用しますか?
申し訳ありませんが、2つのマトリックスのリンクがあります。バルクRNA-seqとシングルセルRNA-seqはどちらも同じ次元です。 3614個の遺伝子と9つの時点。最初に、質問に貼り付けたのと同じコードでバルクデータを使用してヒートマップをプロットしようとしました。その後、reorder_m2 <-Single_cell_RNA_seq [rev(hm $ rowInd)]を試しました。これは、添え字が範囲外であることを示すエラーです。
hっtps://dりゔぇ。ごおgぇ。こm/ふぃぇ/d/1J4g_TずあーFのっjぶPkj3うおH2すD2tP03/ゔぃえw?うsp=しゃりんg
hっtps://dりゔぇ。ごおgぇ。こm/ふぃぇ/d/1Xq2cJfPq_っgん5えPDcbjgYーkfGKpくTg1/ゔぃえw?うsp=しゃりんg
@FereshTeh,は、行列の列名が同じかどうかを確認します: `all(colnames(m)== colnames(m2))`。そして、最初に簡単なヒートマップを作成して、このトリックを機能させることができるかどうかを確認します。その後、それをより複雑にするよりも。また、 `heatmap.2`と` pheatmap`を同じように使用しないでください。
ありがとう、はい私はそれをチェックしました> all(colnames(r)== colnames(s))[1] TRUE
さて、最初に私の単純なコードをマトリックスで使用してみてください。それが機能する場合は、必要に応じて段階的に難しくします。
Tom Kelly
2018-07-08 13:56:11 UTC
view on stackexchange narkive permalink

両方のデータセットに同じ遺伝子(行)がある場合、2つのオプションがあります。

  1. ヒートマップの行の元の順序を維持します。それらがデータセット内で同じ順序である場合、それらはヒートマップに含まれます。 heatmap.2
  2. ol>

    Rowv = NULL

    dendrogram =“ col” または dendrogram =“ none”

    reorderfun = function(x)return(x)

    1. 事前に遺伝子(行)の順序を計算して、ヒートマップに渡すことができます。質問に示されているコードは、 Rowv = as.dendrogram(hr)ですでにこれを行っています。 2番目のヒートマップで同じ順序を使用するには、同じ同じ樹状図 hr を両方のヒートマップに渡す必要があります。これは、データセットまたは別のサンプルセットからまとめて計算できます。
    2. ol>

      別のオプションは、サンプルと(各データセットの hclust から)個別の樹状図を計算することです。 merge を使用してそれらを結合します。データセットを cbind と組み合わせて、マージされた樹状図を Colv に渡すことにより、データセットを1つのヒートマップとして(2セットのサンプルを別々にクラスター化して)プロットできます。

        #compute同じ樹状図を個別にhc1<- hclust(as.dist(t(data1)、method = "euclidean"))、method = "complete")hr2 <- hclust(as.dist(t(data2 )、method = "euclidean"))、method = "complete")mergedcols <- merge(as.dendrogram(hr1)、as.dendrogram(hr2))mergeddata <- cbind(data1、data2)#compute gene dendrogram through all sampleshr <- hclust(as.dist(1-cor(t(mergeddata)、method = "pearson"))、method = "complete")heatmap.2(mergeddata、Rowv = as.dendrogram(hr)、Colv = as .dendrogram(mergedcols)、col = myCol、breaks = myBreaks、main = "Title"、key = T、keysize = 1.0、scale = "none"、density.info = "none"、reorderfun = function(d、w) reorder(d、w、agglo.FUN = mean)、trace = "none"、cexRow = 0.2、cexCol = 0.8、
      distfun = function(x)dist(x、method = "euclidean")、hclustfun = function(x)hclust(x、method = "ward.D2")) 

      colsep 引数を使用してこれらのサンプル間の分割を表示できます。



このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 4.0ライセンスに感謝します。
Loading...