2014-11-04 140 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軸(從頂TO-底部)有標籤Marc-Tom-Peter,但X軸有標籤(從左到右)Marc-Peter-Tom。

有誰知道,我怎麼能實現一個情節,兩個軸的標籤都有相同的(原始)順序? (Peter,Tom,Marc),請注意,這只是一個玩具的例子 - 真實的數據有超過100個標籤,因此無法手動定義對。

在此先感謝

+0

歡迎來到SO。作爲你問的第一個問題,你已經做了很多很好的事情。改進這種方法的一種方法是通過添加數據來實現這種再現?這是對SO提出問題的預期部分:http://stackoverflow.com/help/mcve – 2014-11-04 13:17:02

回答

0

首先創建名稱的向量的排序方式你喜歡它:

lvls <- as.character(dat$Names) 

下一個訂單variable所以它匹配Names

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

現在嘗試繪製。

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