在ggplot2中翻转/转置热图

时间:2016-04-14 13:18:56

标签: r ggplot2

代码贝娄生成从左下角到右上角的热图

library(ggplot2)
library(reshape2)
set.seed(111)

n <- 10
m <- matrix(rnorm(n^2), n, n)
m <- cor(m)
m <- melt(m)

ggplot(m, aes(Var1, Var2, fill = value)) + 
    geom_tile()

enter image description here

如何修改我的数据(可能修改融化结果),以便热图从左上角到右下角,结果如下enter image description here

1 个答案:

答案 0 :(得分:3)

与@ Axeman相比,一个糟糕的解决方案(但更有趣)是将旋转变换矩阵应用于数据。

为了理解我们需要什么样的变换,我只在3D散点图上绘制了对角线(值= 1)点。

关于z(值)轴的旋转矩阵

包括增加的常数,最后的等式是

可能有一种更好的方法来对这种转换进行矢量化,但这就是我做到的方式。

rot_m <- matrix(c(0,-1,0,1,0,0,0,0,1),3,3)

ftransform <- function(x){
   t(rot_m %*% as.numeric(matrix(m[x,],3,1)) + matrix(c(0,11,0),3,1))
 }

foo <- lapply(1:nrow(m),ftransform)

foo <- data.frame(do.call(rbind,foo))
names(foo) <- c("Var1","Var2","value")
ggplot(foo, aes(Var1,Var2,fill=value)) + 
   geom_tile()

编辑:对奇怪的图像格式/布局抱歉。