2011-07-02 12 views
2

今朝私はここにあるペアワイズ値の表からヒートマップを作成するソリューションを見つけました。私は格子パッケージがlevelplotsを提供していることがわかりました。データを適切なフォーマットに変換すると、levelplotで再生しました。デフォルトのカラーテーマは、私が何をしたのかを生み出すものではなく、ウェブ上にグレースケールのソリューションを見つけました。しかし、プロットの多くを制御することは、今のところ私の範囲外です。私は非常に頻繁にRを使いませんが、深いデータ構造の多くにはあまりよく知られていません。ラティスとレベルプロットを使用してヒートマップを制御するにはどうすればよいですか?

私の現在のコマンドは次のとおりです。

library("lattice") 
matrix <- as.matrix(rev(read.table("inputfile",header=T,row.names=c(<list of ten names>)))) 
levelplot(matrix,col.regions = grey(100:0/100)) 

これはdput行列の出力です:

 
structure(c("937.5", "652.5", "1066.5", "787.5", "229.5", "115.5", 
"787.5", "763.5", "415.5", "N/A", "1483.5", "1360.5", "1858.5", 
"1309.5", "478.5", "322.5", "1375.5", "1588.5", "N/A", "1759.5", 
"643.5", "904.5", "1189.5", "712.5", "256.5", "154.5", "829.5", 
"N/A", "403.5", "1231.5", "808.5", "1096.5", "1195.5", "913.5", 
"292.5", "187.5", "N/A", "1147.5", "478.5", "1192.5", "6712.5", 
"6373.5", "6517.5", "6058.5", "4555.5", "N/A", "6394.5", "7357.5", 
"6214.5", "6835.5", "3412.5", "3991.5", "3814.5", "3793.5", "N/A", 
"1327.5", "3994.5", "3808.5", "3307.5", "4618.5", "1261.5", "1261.5", 
"1162.5", "N/A", "310.5", "220.5", "1195.5", "1639.5", "574.5", 
"1732.5", "871.5", "847.5", "N/A", "610.5", "262.5", "172.5", 
"943.5", "985.5", "448.5", "1525.5", "940.5", "N/A", "1105.5", 
"829.5", "292.5", "160.5", "961.5", "1198.5", "538.5", "1495.5", 
"N/A", "832.5", "1009.5", "880.5", "280.5", "196.5", "952.5", 
"1357.5", "550.5", "1456.5"), .Dim = c(10L, 10L), .Dimnames = list(
    c("NA_Pacific", "NA_Central", "NA_Atlantic", "Greenland", 
    "EU_NW", "EU_WM", "EU_BS.EM", "Asia_SW", "Asia_Central", 
    "Asia_East"), c("Asia_East", "Asia_Central", "Asia_SW", "EU_BS.EM", 
    "EU_WM", "EU_NW", "Greenland", "NA_Atlantic", "NA_Central", 
    "NA_Pacific"))) 
  1. これは私が 達成したいほとんど何作成されます。しかしグレーは 醜いです。たとえば、 を青色に変更するにはどうすればよいですか?さらに...

  2. 動作しない青 グレー代入すると、それは私が私の 入力テーブルに指定されているよう 目盛りにラベルを印刷します。これはy軸の では有効ですが、x軸では機能しません。どうすれば をx軸ティック( 90度回転)にプリントするためにy軸ダニをリサイクルできますか?

  3. 最後に、 (上と下)には、わずかな ビットの空白があります。これは実際には の問題ではありませんが、それを除去するにはちょうどいい でしょう。

質問の少なくとも一部が解決されることを願っています。前もって感謝します。 matrixオブジェクトが文字行列であると私はlevelplotが数値1とのより良い動作することを期待していたので、私が作ったその瞬間に

+0

'matrix'オブジェクトにdputまたはstrのいずれかを持たせることは本当に役立ちます。 –

答えて

0

matrix2 <-apply(matrix, 2, as.numeric) 

1)あなたはgreyが関数であることを認識すべきです。 greyのような他の色関数は、rgbhsvを含みます。おそらく... , col.regions=rgb(100)) ... 101個の異なるx値があると仮定します。編集:それは間違っていた。 RGB関数は、次の3つのベクトル引数をheeds:軸目盛ラベルはスケールパラメータにリスト引数で制御されている)

col.regions = c(rgb(50:0/50, 0, 0),rgb(0,0:50/50,0)) 
    # ugly result but shows how to use two color ranges 

2:これを試してみてください。 ... , scales=list(x=list(labels=<label=vector>, at=<tick-positions>))の行に沿って何か。これは、z-区切りを設定するのに使用されるものとは異なるatになります。

3)次元や余分な値の不一致によってx軸に沿って空白を作成したと思います。デフォルトのレベルプロットは空白を作成しません。あなたのオブジェクトの詳細が必要でした。

rownames(matrix2) <- NULL 
colnames(matrix2) <- NULL # don't throw away matrix, we need its dimnames 
levelplot(matrix2,col.regions = c(rgb(50:0/50, 0, 0),rgb(0,0:50/50,0)), region=TRUE, 
    scales=list(x=list(rot=90, at=1:10, labels=rownames(matrix)), y=list(at=1:10, 
    labels=rownames(matrix)))) 
+0

OK、dput(行列)の出力で私の質問を編集しました –

+0

すごく醜いです。その間、私は行列名を列挙する方法も見つけました。彼らは正しくプロットされているので、今度は90度回転させる必要があります... –

+0

ああ!私は右のx軸を得た!スケールを指してくれてありがとう!私は今、仕事をしている 'scales = list(x = list(rot = 90))'を使っています!だから私はグレイスケールのものを残しています。あなたがポインタを理解しているかどうかわからない... –

1

私は目盛りラベルや行列の定義をかなり周りいじって、見つかった今はかなり仕事:dimnamesはなく、そこに彼らがNULLのとき、「文字」であるため、これをしようとすると、空白が存在していることが判明はい、私はrow.namesをマトリックスに含めることができました。しかし、col.regionsがレベルプロット機能に使用できる方法は目を奪うものでした!私は今levelplotでカラーランプを取得するには、次の使用:

ramp <- colorRamp(c("white", "blue")) 

これは、白と青の間のランプが作成されますが、他の色が可能です。ランプの方向は同時に決定されます。ここでは、低い値は白で、高い値は青である。それはマトリックス中の異なった値の量よりも大きくなるように長さが大きいものに設定する必要があり

col.regions=rgb(ramp(seq(0, 1, length = 1000)), max = 255) 

levelplotに私はこのようなcol.regionsと、このランプを使用します。それ以外の場合は、ヒートマップで色がリサイクルされます。 max=255を設定すると、ランプの2つの色の間の全範囲が定義されます。値を低く設定することは、私が使用する方法で許容できる最低値なので、機能しません。それを高く設定すると、ランプの「暗闇」が上方にシフトします。これは何度か良いかもしれません。

多分プロの解決策ではないかもしれませんが、私の場合はかなりうまく動作し、カラーランプをうまくコントロールできます。ポインタをありがとう!

関連する問題