Cluster data in heat map in R ggplot

后端 未结 3 1081
予麋鹿
予麋鹿 2020-12-29 10:06

Please see my plot below: \"enter

my code:

 > head(data)
                  


        
3条回答
  •  无人及你
    2020-12-29 10:34

    Thought I'd add you don't need to transform the columns in the data.frame to factors, you can use ggplot's scale_*_discrete function to set the plotting order of axes. Simply set the plotting order using the limits argument and the labels using the labels argument as shown below.

    data<-read.table(text="X0      X1      X2       X3       X4       X5       X6        X7        X8        X9
     NM_001001144 6.52334 9.75243 5.62914 6.833650 6.789850 7.421440 8.675330 12.117600 11.551500  7.676900
     NM_001001327 1.89826 3.74708 1.48213 0.590923 2.915120 4.052600 0.758997  3.653680  1.931400  2.487570
     NM_001002267 1.70346 2.72858 2.10879 1.898050 3.063480 4.435810 7.499640  5.038870 11.128700 22.016500
     NM_001003717 6.02279 7.46547 7.39593 7.344080 4.568470 3.347250 2.230450  3.598560  2.470390  4.184450
     NM_001003920 1.06842 1.11961 1.38981 1.054000 0.833823 0.866511 0.795384  0.980946  0.731532  0.949049
     NM_001003953 7.50832 7.13316 4.10741 5.327390 2.311230 1.023050 2.573220  1.883740  3.215150  2.483410", header = TRUE, stringsAsFactors = FALSE)
    data <- scale(t(data))
    ord <- hclust( dist(data, method = "euclidean"), method = "ward.D" )$order
    pd <- as.data.frame( data )
    pd$Time <- sub("_.*", "", rownames(pd))
    pd.m <- melt( pd, id.vars = "Time", variable.name = "Gene" )
    ggplot( pd.m, aes(Time, Gene) ) +
      geom_tile(aes(fill = value)) +
      scale_x_discrete(limits=pd.m$Time[ord], labels = c("0h", "0.25h", "0.5h","1h","2h","3h","6h","12h","24h","48h"))+
      scale_y_discrete(limits=colnames(data), labels = seq_along(colnames(data)))+
      scale_fill_gradient2(low=muted("blue"), high=muted("red"))
    

提交回复
热议问题