2

x ラベル、y ラベル、そして値を持つ行ごとに整理されたデータ ファイルがあります。基本的な構造は次のようになります。

Factor_1,Factor_2,Number
apple,apple,1
banana,apple,1
apple,kiwi,6
apple,pear,1
watermelon,apple,8
banana,banana,3
banana,kiwi,2
banana,pear,1
banana,watermelon,9
kiwi,kiwi,9
pear,kiwi,4
kiwi,watermelon,4
pear,pear,3
pear,watermelon,9
watermelon,watermelon,1
...
...

このデータを使用して、次のコードを使用して相関行列に似たものを構築しています。

library(ggplot2)
library(reshape2)

d <- read.csv("my_file", head=TRUE, sep="\t")
x <- dcast(d, Factor_1~Factor_2)
x.m <- melt(x)
x.m <- ddply(x.m, .(variable))
(p <- ggplot(x.m, aes(variable, Factor_1)) + geom_tile(aes(fill = value), colour = "black") + scale_fill_gradient(low = "black", high = "green")

上記のコードにより、次のようなプロットが得られます。

プロット

データを並べ替えて、すべてのデータが対角線の下にグループ化された次の形式のプロットを作成するにはどうすればよいですか?

   A  B  K  P  W
W              1
P           3  9
K        9  4  4
B     3  2  1  9
A  1  1  6  1  8
4

2 に答える 2

3

1 つの解決策は、data.frame の最初の 2 列の要素を適切な順序ですぐに取得することです。(注: これが機能するためには、両方の列がクラスcharacterである必要があります。代わりに要因である場合は、最初に でそれらを強制しますas.character()。)

次のことを行った後、プロットは思いどおりになるはずです。

ordered <- apply(d[c("Factor_1", "Factor_2")], 1, sort)
d[c("Factor_1")] <- ordered[1,]
d[c("Factor_2")] <- ordered[2,]

そのコードが何をしたかを確認するために、並べ替え前の data.frame の最初の 6 行を次に示します。

    Factor_1 Factor_2 Number
1      apple    apple      1
2     banana    apple      1
3      apple     kiwi      6
4      apple     pear      1
5 watermelon    apple      8
6     banana   banana      3

そしてここにそれらはその後です:

  Factor_1   Factor_2 Number
1    apple      apple      1
2    apple     banana      1
3    apple       kiwi      6
4    apple       pear      1
5    apple watermelon      8
6   banana     banana      3
于 2012-01-05T19:40:19.187 に答える
3

私はそれを「果物」と呼んだ:

fruit.tbl <- xtabs(V3 ~ V1+V2, data=fruits)
> melt(fruit.tbl)
           V1         V2 value
1       apple      apple     1
2      banana      apple     0
3        kiwi      apple     0
4        pear      apple     0
5  watermelon      apple     0
6       apple     banana     1
7      banana     banana     3
8        kiwi     banana     0
9        pear     banana     0
10 watermelon     banana     0
11      apple       kiwi     6
12     banana       kiwi     2
13       kiwi       kiwi     9
14       pear       kiwi     0
15 watermelon       kiwi     0
16      apple       pear     1
17     banana       pear     1
18       kiwi       pear     4
19       pear       pear     3
20 watermelon       pear     0
21      apple watermelon     8
22     banana watermelon     9
23       kiwi watermelon     4
24       pear watermelon     9
25 watermelon watermelon     1

mfruit <- melt(fruit.tbl)
is.na(mfruit$value) <- mfruit$value==0

# Needed to swap x and y to get it the way you wanted
 (p <- ggplot(melt(mfruit), aes(V2, V1,fill = value)) + 
                geom_tile( colour = "black") + 
                scale_fill_gradient(low = "black", high = "green")
   )

ここに画像の説明を入力

于 2012-01-05T19:45:13.293 に答える