繁体   English   中英

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

我在heatmaplattice::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)

您可能想要添加一个色阶,并使用比我的valuegray阴影更鲜艳的gray (值越暗)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM