2013-03-05 51 views
1

我有一个data.frame或矩阵,我想将其转入简单的绘图。 我尝试了heatmap和corrgram,但这些都很复杂,并且正在做我不想要的东西(缩放等)。需要简单绘图帮助:R中的相关矩阵和热图功能的混合

矩阵如下所示:

___V1_V2_V3_V4

V1 - NA - 0 --- 1 ---- 1

V2 --- 0 - NA- -4 ---- 2

V3 --- 1 --- 4 - NA --- 3

V4 --- 1 --- 2 --- 3 --- NA

因此,V1与V2,V3和V4有什么共同点? 我只想要对角线三角形的下半部分,而在对角线上的变量名称为 并且由于有5个值(0到4),所以我想从框中的红色到深红色的5个阴影。

我需要用rect()和text()来创建自己,但是由于我的矩阵比这个例子更大,我想循环它而不是手工绘制每个盒子。 我可以用ggplot2吗?

希望任何人有一个想法! ty

回答

0

您可以从latticeExtra包中以levelplot.points的形式呈现。

enter image description here

首先我重建数据。我的数据是3列x(1:4),y(1:4),z是输入矩阵的电平。

mm <- rbind(
    c(NA,0,1,1), 
    c(0,NA,4,2), 
    c(1,4,NA,3), 
    c(1,2,3,NA)) 
dat <- expand.grid(x=1:ncol(mm),y=1:nrow(mm)) 
dat$z <- as.vector(mm) 

library(latticeExtra) 
levelplot(z~x*y,data=dat, 
     panel=function(...) 
     { 
     panel.levelplot.points(...,cex=10,pch=22) 
     panel.grid() 
     },par.settings=ggplot2like()) 
+0

便创建了具有4×4基和z值作为我的“强度”值的3维阵列。我之前从未使用过expand.grid()或levelplot()函数,所以代码看起来有点奇怪:)是否有机会将灰色区域最小化?我非常喜欢右侧的传奇级别。 – JollyRoger 2013-03-05 14:29:53

+0

@OoTorstenOo是的。这只是一个简单的散点图,带有特殊的几何图形。这个几何体用强度矩阵填充或着色。 – agstudy 2013-03-05 14:32:43

1

这里使用ggplot2溶液和在@agstudy回答所提供的数据帧dat

library(ggplot2) 
ggplot(dat,aes(x,y,fill=z))+geom_tile()+ 
    scale_fill_gradient(low="red",high="darkred") 

enter image description here

+0

非常感谢,这已经看起来非常好。我不知道如何用“text”来重命名axis-1,2,3,4s等?可以在ggplot2窗口中使用mtext()或text()命令吗? – JollyRoger 2013-03-05 14:26:14

+0

@OoTorstenOo如果您的数据框将包含x和y值作为将自动完成的文本。或者你可以使用scale_x_continuous()和scale_y_continuous()来设置中断和标签。 – 2013-03-05 16:06:15