2016-04-05 7 views
0

私はggplot2を使ってヒートマップを作成しています。値をヒートマップボックスの中に入れたいと思っていますが、ファセットしていないときにうまくいく間に、数字が間違ったボックスにすべて表示されます。ファセットを作成するときに、数字を右のボックスに入れる方法に関するヒントヒートマップの値ラベルが面倒なものになる(ggplot2)

また、いくつかの小さな質問:面付けしていないときやタイルのサイズを変更する方法。ボックス内の値のテキストの色を変更する(< - 明らかな解決策を試しましたが、うまくいかない...)

ありがとうございました!

コード(ファセットがコメントアウトされた場所を確認できます):

fpdata<-read.csv("fp.csv",header=T) 
fpdata$Dimension=factor(fpdata$Dimension,levels(fpdata$Dimension)[c(4,1,3,2,5)]) 
fpdata$Trait=factor(fpdata$Trait,levels(fpdata$Trait)[c(22,15,16,3,4,9,21,20,10,14,6,2,1, 
                 13,8,11,12,17,24,25,18,5,23,19,7)]) 
matrix <- melt(fpdata) 
matrix 
matrix$value[is.na(matrix$value)] <- 2 
matrix 


p3 <- ggplot(data = matrix, aes(variable, Trait, fill = value))+ 
    geom_tile(color = "white")+ 
    scale_fill_gradient2(low = "blue", high = "firebrick", mid = "deepskyblue", 
         midpoint = 0.6, limit = c(0.6,1), space = "Lab", 
         name="Factor Loadings")+labs(x = "Reduction #")+ 
    geom_text(aes(label=ifelse(matrix$value<2,matrix$value," "))) 
    ##+facet_grid(~Dimension, scale="free") 

p3 <- p3 + 
    theme (axis.title.x = element_text(size=20), 
     axis.title.y = element_text(size=20), 
     axis.text.x = element_text(angle = 0, vjust = 1, size = 14, hjust = 0.5), 
     axis.text.y = element_text(size=16), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     legend.title = element_text(size=16), 
     legend.text = element_text(size=14), 
     strip.text.x = element_text(size=13, face="bold"))+coord_fixed() 
p3 

ファセット

なしヒートマップ

enter image description here

ファセット

ヒートマップ

enter image description here

+0

'aes()'の中で '$'を使わないでください。代わりにggplot2の外側のデータフレームに変数を定義する – baptiste

+0

@baptiste?私はnewvar <-m​​atrix $ valueがあったので、geom_text aesをnewvarに置き換えましたが、問題はまだ残っていました。 –

答えて

0
df <- data.frame(trait = sample(letters, 15), 
       dimension = rep(LETTERS[1:5], 3), 
       variable = paste0('R', 1:3), 
       value = runif(15)) 

ggplot(df, aes(variable, trait, fill = value)) + 
    geom_tile(aes(fill = ifelse(value > 0.25, value, NA))) + 
    geom_text(aes(label = ifelse(value > 0.25, round(value, 2), NA))) + 
    facet_grid(~dimension, scales = 'free') 

再現可能な例私はあなたのデータを幾分ミラーリングしたいと思います。上記のように、この場合、値は入力(df $ value)で既に定義されています。だからあなたはそれを裸の(引用されていない)シンボルとして直接参照することができます。

+0

ああ私の神様、ここではどんな魔法を使いましたか?できます。 –

関連する問題