2013-04-06 3 views
2

일부 선형 조합에 사용 된 변수의 범주 값과 해당 r.squared 값을 보여주는 행렬이 있습니다. 선형 조합에 사용되는 변수의 수는 1과 4 사이에서 다양하기 때문에 몇 가지 NA가 있습니다. 내가 NAS가 표시되지 않게하려면, 그러나 Rplot1.pngggplot2, geom_text에서 NAs를 건너 뛰는 방법

나는 그것을 할 방법을 알아낼 수 없습니다입니다 :

나는 내가 원하는 것을 꽤 가까운이 출력을 얻을 수 ggplot2를 사용 geom_text()이 길이가 잘못되어 geom_text(aes(label = sprintf("%1.0f",value[!is.na(value])))과 같은 것을 시도하면 모든 것을 표시하거나 오류가 발생합니다.

나는 마지막 열을 다른 정밀도 (소수점 이하 2 자리)와 다른 색 코드로 형식화하고 싶습니다.

내 데이터 :

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") 

내 코드 :

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) 

이 어떤 도움, 에릭

을 사전에 감사 감사는
+0

데이터가 녹아 들어가는 것은 다소 모호합니다. 그 부분을 재실행 할 수 있습니까? 내가 녹을 때 두 개의 열을 얻었지만 3을 참조했습니다. –

+0

은 cor_dat2 <- melt (as.matrix (plotMat2))에서 as.matrix()를 잊어 버렸습니다. 지금 3 열을 주어야합니다. – Eric

+0

질문에 답해 주시기 바랍니다. –

답변

6

그냥 교체 geom_text과 :

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

enter image description here

+0

고마워요! 필자는'ifelse (value <1) '을 사용하여 rsq의 정밀도와 색상을 변경할 수 있다고 가정합니다. 나는 시도 할 것이다. – Eric

+1

아마'if (is.na (value), ", ifelse (value <1), bla, bla))' – Arun