对称(同轴)热图与ggplot2

时间:2014-11-04 12:33:26

标签: r plot ggplot2

我想使用ggplot2来创建对称热图。 x轴应显示与y轴完全相同的标签。不幸的是,ddply()方法会影响订单。

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 。

有谁知道,我如何才能实现两个轴的标签具有相同(原始)顺序的情节? (彼得,汤姆,马克),请注意,这只是一个玩具示例 - 真实数据有超过100个标签,因此无法手动定义对。

提前致谢

2 个答案:

答案 0 :(得分:0)

首先按照您喜欢的方式创建一个名称的矢量:

lvls <- as.character(dat$Names)

下一个订单variable,因此它与Names匹配:

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

现在尝试绘图。

答案 1 :(得分: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))