2016-10-04 104 views
0

我試圖使用ggplotgeom_tile生成heatmap繪圖。我的數據有比行多得多的行。獲取geom_tile繪製正方形而不是矩形單元格

set.seed(1) 
    df <- data.frame(val=rnorm(100),gene=rep(letters[1:20],5),cell=c(sapply(LETTERS[1:5],function(l) rep(l,20)))) 

運行:

library(ggplot2) 
ggplot(df,aes(y=gene,x=cell,fill=val))+geom_tile(color="white") 

生產: enter image description here

如何獲得heatmap細胞是對稱的尺寸 - 方形而不是長方形(高度=寬度)?而不會扭曲圖的尺寸。

回答

3

歡迎調整比率如下

set.seed(1) 
df <- data.frame(val=rnorm(100),gene=rep(letters[1:20],5), 
      cell=c(sapply(LETTERS[1:5],function(l) rep(l,20)))) 

library(ggplot2) 
p <- ggplot(df,aes(y=gene,x=cell,fill=val))+geom_tile(color="white") 
p <- p + coord_fixed(ratio = 0.7) 
p 

enter image description here

+0

但是,如果我的實際數據有更多行:df < - data.frame(val = rnorm(500),gene = rep(1:100,5),cell = c(sapply(LETTERS [1:5],function(l) rep(l,100)))),這大大縮小了這個數字。 – dan

+2

但是...你_want_廣場。我不確定你打算如何在沒有漫長陰謀的情況下獲得廣場。你可以'coord_flip()'它(我會在嘗試之前交換x和y,因爲它是相同的事物,並且更容易記住)。或者你可以將它分成2,3,4個圖,但保持相同的色階。 – hrbrmstr

6

一個選項是添加coord_equal

默認,比= 1,確保了在x軸上的一個單位是 相同的長度作爲一個單元在y軸

ggplot(df, aes(y = gene, x = cell, fill = val)) + 
    geom_tile(color = "white") + 
    coord_equal() 

enter image description here