簡體   English   中英

在 ggplot2 中翻轉/轉置熱圖

[英]Flip/transpose a heatmap in 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()

在此處輸入圖像描述

我如何修改我的數據(可能修改熔化結果)以便熱圖從左上角到右下角為 go,結果如下在此處輸入圖像描述

與@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()

編輯:對奇怪的圖像格式/布局表示歉意。

這對我有用

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

結果 plot

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM