r - How to make a complex heatmap using ggplot2? -


i tried plot complex heatmap using ggplot2 cancer somatic mutation.

the data here, , here code:

library(reshape2) library(ggplot2) library(scales) library(gridextra) library(ggdendro) library(zoo) library(plyr)  #data process mm8<-read.csv("mm8.csv",header=true) rownames(mm8)<-mm8$x mm8<-mm8[,-2] mm8[1:4,2:5]  #cluster http://stackoverflow.com/questions/21474388/colorize-clusters-in-dendogram-with-ggplot2 df<-t(mm8) df<-df[-1,] cut <- 4    # number of clusters hc <- hclust(dist(df), "ave")              # heirarchal clustering dendr <- dendro_data(hc, type = "rectangle")  clust <- cutree(hc, k = cut)               # find 'cut' clusters clust.df <- data.frame(label = names(clust), cluster = clust)  # split dendrogram upper grey section , lower coloured section height <- unique(dendr$segments$y)[order(unique(dendr$segments$y), decreasing = true)] cut.height <- mean(c(height[cut], height[cut-1])) dendr$segments$line <- ifelse(dendr$segments$y == dendr$segments$yend &                                 dendr$segments$y > cut.height, 1, 2) dendr$segments$line <- ifelse(dendr$segments$yend  > cut.height, 1, dendr$segments$line)  # number clusters dendr$segments$cluster <- c(-1, diff(dendr$segments$line)) change <- which(dendr$segments$cluster == 1) (i in 1:cut) dendr$segments$cluster[change[i]] = + 1 dendr$segments$cluster <-  ifelse(dendr$segments$line == 1, 1,                                    ifelse(dendr$segments$cluster == 0, na, dendr$segments$cluster)) dendr$segments$cluster <- na.locf(dendr$segments$cluster)   # consistent numbering between segment$cluster , label$cluster clust.df$label <- factor(clust.df$label, levels = levels(dendr$labels$label)) clust.df <- arrange(clust.df, label) clust.df$cluster <- factor((clust.df$cluster), levels = unique(clust.df$cluster), labels = (1:cut) + 1) dendr[["labels"]] <- merge(dendr[["labels"]], clust.df, = "label")  # positions cluster labels n.rle <- rle(dendr$segments$cluster) n <- cumsum(n.rle$lengths) n <- n[seq(1, length(n), 2)] + 1 n.df <- dendr$segments[n, ] n.df$cluster <- n.df$cluster - 1  # plot dendrogram # plot dendrogram p3<-ggplot() +    geom_segment(data = segment(dendr),                 aes(x=x, y=y, xend=xend, yend=yend, size=factor(line), colour=factor(cluster)),                 lineend = "square", show_guide = false) +    scale_colour_manual(values = c("grey60", rainbow(cut))) +   scale_size_manual(values = c(.1, 1)) +   labs(x = null, y = null) +   theme(axis.line.y = element_blank(),         axis.ticks.y = element_blank(),         axis.text.y = element_blank(),         axis.title.y = element_blank(),         panel.background = element_blank(),         panel.grid = element_blank())        +   guides(fill = false)+   theme(axis.ticks.x = element_blank(),          axis.text.x = element_blank(),         axis.title.x = element_blank(),         plot.background = element_blank())  #priparing bar??? p4<-ggplot(clust.df,aes(x=label,y=1,fill=cluster))+geom_raster()+   theme(axis.line.y = element_blank(),         axis.ticks.y = element_blank(),         axis.text.y = element_blank(),         axis.title.y = element_blank(),         panel.background = element_blank(),         panel.grid = element_blank())        +   guides(fill = false)+   theme(axis.ticks.x = element_blank(),          axis.text.x = element_blank(),         axis.title.x = element_blank(),         plot.background = element_blank())   #data ggplot2 geom_raster data.m = melt(mm8) colnames(data.m)<-c("var1", "var2", "value") head(data.m)  #plotting p1 <- ggplot(data.m, aes(var2, var1)) + geom_raster(aes(fill = value),colour ="white") p1<-p1 + theme(axis.ticks = element_blank(), axis.text = element_blank(),axis.title=element_blank(),plot.background = element_blank()) p2<-ggplot(data.m,aes(var1,value*(-1)))+geom_bar(data.m, aes(fill=var2),position="stack",stat="identity")+coord_flip() p2<-ggplot(data.m,aes(var1,value*(-1)))+geom_bar(data.m, aes(fill=var2),position="stack",stat="identity")+coord_flip()+guides(fill = false)+theme(axis.ticks.x = element_blank(), axis.text.x = element_blank(),axis.title.x = element_blank(),plot.background = element_blank())  #plotting 4 panels on page vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)  #open graphic device win.graph(width=860/72, height=450/72,pointsize = 12)   #plotting grid.newpage() pushviewport(viewport(layout = grid.layout(24, 50))) # 1 rows, 8 columns  #plotting print(p2, vp = vplayout(5:24, 1:10))   print(p1, vp = vplayout(5:24, 10:50),newpage=false)    print(p3, vp = vplayout(1:3, 9:47),newpage=false) print(p4, vp = vplayout(3:5, 10:46),newpage=false) #save saveplot(filename="complex", type="emf") dev.off() 

and got picture this: enter image description here

1) how automatically align p1,p3 , p4? sample on x, features on p1, p3 , p4 align automatically ?
2) ideas control space between pancels? example, reducing space between p1 , p2, or p1 , p4.
3) how reorder samples on x-axis according cluster results? , how control order on x-axis p1,p3,and p4 simultaneously?

this week in same position you, being dissatisfied results heatmaps in ggplot2. yesterday, came across newer package on bioconductor should panel placement. suggest checking out complexheatmaps package, vignette nice.


Comments

Popular posts from this blog

asp.net mvc - SSO between MVCForum and Umbraco7 -

Python Tkinter keyboard using bind -

ubuntu - Selenium Node Not Connecting to Hub, Not Opening Port -