2014-11-04 3 views
0

ggplot2를 사용하여 대칭 히트 맵을 만들고 싶습니다. x 축은 y 축과 정확히 동일한 레이블을 표시해야합니다. 불행히도 ddply() 메서드는 순서에 영향을 미칩니다.대칭 (동일 축) ggplot2를 사용한 히트 맵

input.csv은 다음과 같습니다

Names,Peter,Tom,Marc 
    Peter,1,6,1 
    Tom,2,4,12 
    Marc,3,0,21 

임 지금까지 다음 코드를 사용 :

library(ggplot2) 
library(plyr) 
library(reshape2) 
library (scales) 
dat <- read.csv("input.csv")# read input 
dat.m <- melt(dat)# to "melt" the dataset 
dat.s <- ddply(dat.m, .(variable), transform, rescale = scale(value)) #pairwise format 
file <- ggplot(dat.s, aes(Names,variable)) + geom_tile(aes(fill = value),colour = "white") + theme(axis.text.x = element_text(angle = 90, hjust = 1),legend.position="top") 
pdf(file=paste("output",".pdf",sep="")) # write to file 
plot(file) 
# make plot 
dev.off() 

이 플롯 결과 위치를 상단 대에서 Y 축 (아래쪽)에는 Marc-Tom-Peter라는 레이블이 있지만 X 축에는 Marc-Peter-Tom이라는 레이블이 있습니다 (왼쪽에서 오른쪽).

알고 계십니까, 두 축의 라벨이 같은 (원래의) 순서를 갖는 음모를 어떻게 얻을 수 있습니까? (Peter, Tom, Marc), 이것은 단지 장난감의 예에 불과합니다. 실제 데이터에는 100 개가 넘는 레이블이 있으므로 수동으로 쌍을 정의하는 데 도움이되지 않습니다.

lvls <- as.character(dat$Names) 

는 다음 순서 variable은 그래서 Names 일치 :

dat.s$variable <- factor(dat.s$variable, levels = lvls) 

이제하려 시도

+0

안녕하세요. 여러분이 묻는 첫 번째 질문으로, 여러분은 여러 가지 일을 훌륭하게 해왔습니다. 이를 개선하는 한 가지 방법은 데이터를 추가하여이를 재현 할 수있게하는 것입니다. 이것은 SO에 대한 질문을하는 데 필요한 부분입니다. http://stackoverflow.com/help/mcve –

답변

0

먼저 이름의 벡터를 만들 미리

덕분에 당신이 그것을 원하는 방식으로 정렬 .

0

limits을 저울에 추가 할 수도 있습니다. 기본값은 하단에서 상단으로 설정되어 있으므로 올바르게 이해하면 rev을 사용해야 순서를 바꿀 수 있습니다. 가능한 해결책은 다음과 같습니다.

ggplot(dat.s, aes(Names,variable)) + 
    geom_tile(aes(fill = value),colour = "white") + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1),legend.position="top") + 
    scale_x_discrete(limits = dat$Names) + 
    scale_y_discrete(limits = rev(dat$Names))