2017-10-05 115 views
1

以下是我嘗試使用ggplot2創建熱圖。在ggplot中分組標籤

#DATA 
set.seed(42) 
df1 = data.frame(ID = paste0("I", 1:40), 
       group = rep(c("Dry", "Rain"), each = 20), 
       subgroup = rep(paste0("S", 1:4), each = 10), 
       setNames(data.frame(replicate(8, rnorm(40))), letters[1:8])) 
library(reshape2) 
df1 = melt(df1, id.vars = c("ID", "group", "subgroup")) 
df1 = df1[order(df1$group, df1$subgroup),] 
df1$fact = paste(df1$subgroup, df1$ID) 
df1$fact = factor(df1$fact, levels = unique(df1$fact)) 

#PLOT 
library(ggplot2) 
ggplot(df1, aes(x = variable, y = fact, fill = value)) + 
    geom_tile() + 
    scale_y_discrete(labels = df1$subgroup[!duplicated(df1$ID)]) 

情節正是我想除了一個事實,那是什麼標籤S1S2S3,並且S4反覆各做10次。有沒有辦法只顯示它們一次,然後在S1,S2,S3S4之間加上某種中斷。

enter image description here

我也很好奇,如果有辦法把groupsubgroup左側中的情節作爲輔助y軸但這是可選的。

回答

1

您可以使用facet_grid這將解決y軸上的子組指示符和子組之間的空白間隔。

您還可以刪除theme中的y軸標籤以避免冗餘。

ggplot(df1, aes(x = variable, y = fact, fill = value)) + 
    geom_tile() + 
    facet_grid(subgroup~., scales="free_y") + 
    theme(axis.text.y = element_blank()) 

注:scales="free_y"是必要的,因爲fact是不能跨越亞組是相同的,看輸出,如果該參數不存在。

enter image description here