我想使用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个标签,因此无法手动定义对。
提前致谢
答案 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))