2013-04-06 7 views
2

J'ai une matrice qui montre les valeurs catégoriques des variables que j'ai utilisées pour certaines combinaisons linéaires et une valeur r.carrée correspondante. Puisque le nombre de variables utilisées pour les combinaisons linéaires varie entre 1 et 4, il y a plusieurs NA.ggplot2, comment ignorer les NA dans geom_text

J'utilise ggplot2 pour obtenir cette sortie, ce qui est assez proche de ce que je veux: Rplot1.png

Cependant, je ne veux pas le NAs à afficher et je suis incapable de comprendre comment le faire geom_text() affiche tout ou me donne une erreur si j'essaie quelque chose comme geom_text(aes(label = sprintf("%1.0f",value[!is.na(value]))) parce que la longueur est erronée dans ce cas.

En outre, j'aimerais que la dernière colonne soit formatée avec une précision différente (2 décimales) et dans un code de couleur différent.

Mes données:

col1 <- c(3, 12, 12, 4, 2, 4, 6, 4, 15, 13, 1, 4, 13, 13, 4, 4, 6, 13, 1, 4) 
col2 <- c(14, 29, 33, NA, 3, 14, 14, NA, 18, 18, 3, NA, 18, 18, 5, NA, 14, 18, 3, NA) 
col3 <- c(22, 33, NA, NA, 6, 23, NA, NA, 25, 25, NA, NA, 24, 25, NA, NA, 21, 25, NA, NA) 
col4 <- c(25, NA, NA, NA, 9, NA, NA, NA, 31, NA, NA, NA, 25, NA, NA, NA, 27, NA, NA, NA) 
col5 <- c(0.99879174731700204326, 0.99026853951234095064, 0.97577109510739901133, 0.94129388844778405510, 0.99280352772128999117, 0.96836063265002103595, 0.93791976583184200056, 
     0.84138009684215697703, 0.98856063354420098399, 0.97136223282556599656, 0.79804189507803902082, 0.64147943288862196987, 0.99825754796980703532, 0.96893762747413503256, 
     0.87923096638698294836, 0.78073080902317304464, 0.99370888114350197640, 0.95233511051330899111, 0.80470423703937299376, 0.62955867989309499677) 

plotMat2 <- data.frame(cbind(col1,col2,col3,col4,col5), 
          row.names=c("data.max4","data.max3","data.max2","data.max1","data.3QT4","data.3QT3","data.3QT2","data.3QT1","data.median4","data.median3","data.median2", 
           "data.median1","data.mean4","data.mean3","data.mean2","data.mean1","data.1QT4","data.1QT3","data.1QT2","data.1QT1")) 
names(plotMat2) <- c("SU" , "SU.1", "SU.2", "SU.3", "rsq") 

Mon code:

library(reshape) 
cor_dat2 <- melt(as.matrix(plotMat2)) 
names(cor_dat2) <- c('Var1','Var2','value') 
cor_dat2$Var1 <- factor(row.names(plotMat2), levels=rev(row.names(plotMat2))) 
cor_dat2$Var2 <- factor(cor_dat2$Var2, levels=colnames(plotMat2)) 


library(ggplot2) 
p <- ggplot(data = cor_dat2, aes(x = Var2, y = Var1)) + 
    geom_tile(aes(fill = value), colour = "black") + 
    geom_text(aes(label = sprintf("%1.0f",value))) + 
    scale_fill_gradient(low = "white", high = "red") 
print(p) 

Toute aide est appréciée, merci à l'avance, Eric

+0

La fusion de vos données est un peu ambiguë. Pouvez-vous réexécuter cette partie? Quand je fond, je reçois deux colonnes, mais vous faites référence à 3. –

+0

oublié as.matrix() dans cor_dat2 <- fondu (as.matrix (plotMat2)). Doit donner 3 colonnes maintenant. – Eric

+0

N'hésitez pas à modifier votre question pour refléter cela. –

Répondre

6

raccrochez le geom_text avec:

geom_text(aes(label = ifelse(is.na(value), "", sprintf("%1.0f",value)))) + 

enter image description here

+0

Merci! Je suppose que je peux changer la précision et la couleur pour rsq avec ce 'ifelse (value <1)' aussi. Je vais essayer. – Eric

+1

probablement avec 'if (is.na (valeur)," ", ifelse (valeur <1), bla, bla))' – Arun

Questions connexes