2017-04-09 15 views
0

ggplot을 사용하여 데이터에 맨 앞에 0을 포함하지 않고 상관 행렬의 히트 맵을 생성하려고합니다.ggplot2 그림에서 맨 앞에 0을 제거합니다.

은 "데이터 세트"패키지에 LifeCycleSavings에서이 예제를 생각해 봅시다 :

 pop75 dpi ddpi 
sr  0.317 0.220 0.305 
pop15 -0.908 -0.756 -0.048 

내가 그릴 수있는 heatmap과 같이 :

library(reshape2) 
melted_cors <- melt(cors) 
library(ggplot2) 
ggplot(melted_cors, aes(Var2, Var1, fill = value)) + 
    geom_tile(color = "white") + 
    geom_text(aes(Var2, Var1, label = value), color = "black", size = 4) + 
    scale_fill_gradient2(low = "blue", mid = "white", high = "red", 
         midpoint = 0, limit = c(0,1), space = "Lab", 
         name="Pearson\nCorrelation") + 
    theme_minimal() + 
    theme(title = element_blank(), legend.position="none") + 
    coord_fixed() 

이 출력에서 ​​선행 0을 제거 할 수있는 방법이 있나요 ?

+1

당신이 0을 선두로 정확히 무엇을 의미합니까? 상관 관계가없는 용어를 숨기시겠습니까? 소수점 앞에 0을 제거하기 위해 모든 상관 관계에 10을 곱하고 싶습니까? – Eumenedies

+0

은 재생할 수 없습니다. 'cors'는 무엇입니까? – hrbrmstr

답변

0

열과 행이 뒤바뀔 수 있습니다. gsub 사용은 매우 우아하지는 않지만 작동합니다.

cors <- read.table(text= 
"label pop75 dpi ddpi 
sr  0.317 0.220 0.305 
pop15 -0.908 -0.756 -0.048", header=TRUE) 

library(reshape2) 
melted_cors <- melt(cors) 
library(ggplot2) 
ggplot(melted_cors, aes(label, variable, fill = value)) + 
    geom_tile(color = "white") + 
    geom_text(aes(label, variable, label = gsub("0\\.", "\\.", value)), color = "black", size = 4) + 
    scale_fill_gradient2(low = "blue", mid = "white", high = "red", 
         midpoint = 0, limit = c(0,1), space = "Lab", 
         name="Pearson\nCorrelation") + 
    theme_minimal() + 
    theme(title = element_blank(), legend.position="none") + 
    coord_fixed() 

enter image description here

+0

그 덕분에 좋았어, 고마워! – cgdodd

+0

추가 질문 : 모든 셀 (예 : .03, .30, .00 대신 .03, .3 및 0)에서 소수점 이하 자릿수를 표시 할 수 있습니까? – cgdodd

+0

예. geom_text - 값은 말 그대로 모든 문자열이므로 어떤 조작도 할 수 있습니다. 'sprintf ("% .2f", 3.141)'함수는 소수점 이하 2 자리로 반올림됩니다. 그래서'gsub ("0 \\.", "\\.", (sprintf ("%. 2f, value))' – epi99