R:如何绘制由对角线划分的热图?
R: How to Draw heat map divided by a digonal line?
我看到这篇关于自然方法的文章,它提供了一个非常好的热图:
http://www.nature.com/nmeth/journal/v12/n4/full/nmeth.3311.html
与其他热图不同的是,每个矩形由一条对角线划分,其中一部分代表文献数据,另一部分代表内部数据。我认为这是比较数据的一种非常好的方式。但是,我不知道如何在 R 中绘制这张照片。有人知道如何做吗?
下面提供了一个小截图:
下面是一个 2*2 网格的演示数据集。我想要按组划分的四个矩形的颜色。
Para1 Para2 Value Group
A D 0.2 A1
A E 0.4 A1
B D 0.56 A1
B E 0.32 A1
A D 0.7 B1
A E 0.16 B1
B D 0.12 B1
B E 0.71 B1
我在 heatmap
或 lattice::levelplot
中看不到任何优雅之处。也许有人知道 ggplot
.
这是一个蛮力概念验证:
d=data.frame(p1=rep(LETTERS[1:2],times=2,each=2),
p2=rep(LETTERS[4:5],times=4),
value=c(.2,.4,.56,.32,.7,.16,.12,.71),
group=rep(c("A1","B1"),each=4))
x=as.numeric(d$p1)
y=as.numeric(d$p2)
plot(1,xlim=c(1,length(unique(x))+1),ylim=c(1,length(unique(y))+1),
type="n",bty="n",xaxt="n",yaxt="n",xlab="",ylab="")
for(i in 1:nrow(d)) {
if(d$group[i]=="A1") polygon(x[i]+c(0,1,1),y[i]+c(0,0,1),col=gray(d$value[i]))
if(d$group[i]=="B1") polygon(x[i]+c(0,1,0),y[i]+c(0,1,1),col=gray(d$value[i]))
}
axis(1,at=sort(unique(x))+.5,labels=levels(d$p1),lty=0)
axis(2,at=sort(unique(y))+.5,labels=levels(d$p2),lty=0)
您可能想要添加一个色阶,并使用比我将 value
映射到 gray
阴影更丰富多彩的东西(较低的值更暗)。
我看到这篇关于自然方法的文章,它提供了一个非常好的热图: http://www.nature.com/nmeth/journal/v12/n4/full/nmeth.3311.html
与其他热图不同的是,每个矩形由一条对角线划分,其中一部分代表文献数据,另一部分代表内部数据。我认为这是比较数据的一种非常好的方式。但是,我不知道如何在 R 中绘制这张照片。有人知道如何做吗?
下面提供了一个小截图:
下面是一个 2*2 网格的演示数据集。我想要按组划分的四个矩形的颜色。
Para1 Para2 Value Group
A D 0.2 A1
A E 0.4 A1
B D 0.56 A1
B E 0.32 A1
A D 0.7 B1
A E 0.16 B1
B D 0.12 B1
B E 0.71 B1
我在 heatmap
或 lattice::levelplot
中看不到任何优雅之处。也许有人知道 ggplot
.
这是一个蛮力概念验证:
d=data.frame(p1=rep(LETTERS[1:2],times=2,each=2),
p2=rep(LETTERS[4:5],times=4),
value=c(.2,.4,.56,.32,.7,.16,.12,.71),
group=rep(c("A1","B1"),each=4))
x=as.numeric(d$p1)
y=as.numeric(d$p2)
plot(1,xlim=c(1,length(unique(x))+1),ylim=c(1,length(unique(y))+1),
type="n",bty="n",xaxt="n",yaxt="n",xlab="",ylab="")
for(i in 1:nrow(d)) {
if(d$group[i]=="A1") polygon(x[i]+c(0,1,1),y[i]+c(0,0,1),col=gray(d$value[i]))
if(d$group[i]=="B1") polygon(x[i]+c(0,1,0),y[i]+c(0,1,1),col=gray(d$value[i]))
}
axis(1,at=sort(unique(x))+.5,labels=levels(d$p1),lty=0)
axis(2,at=sort(unique(y))+.5,labels=levels(d$p2),lty=0)
您可能想要添加一个色阶,并使用比我将 value
映射到 gray
阴影更丰富多彩的东西(较低的值更暗)。