Ich würde gerne in der Lage sein, eine R
facettieren.Faceting eine plotly Heatmap
Hier ist, was ich meine: Ich habe einen hierarchisch gruppierten Genexpression-Datensatz:
require(permute)
set.seed(1)
mat <- rbind(cbind(matrix(rnorm(2500,2,1),nrow=25,ncol=500),matrix(rnorm(2500,-2,1),nrow=25,ncol=500)),
cbind(matrix(rnorm(2500,-2,1),nrow=25,ncol=500),matrix(rnorm(2500,2,1),nrow=25,ncol=500)))
rownames(mat) <- paste("g",1:50,sep=".")
colnames(mat) <- paste("s",1:1000,sep=".")
hc.col <- hclust(dist(t(mat)))
dd.col <- as.dendrogram(hc.col)
col.order <- order.dendrogram(dd.col)
hc.row <- hclust(dist(mat))
dd.row <- as.dendrogram(hc.row)
row.order <- order.dendrogram(dd.row)
mat <- mat[row.order,col.order]
ich diskretisieren es dann zu spezifischem Ausdruck reicht, weil das die Auflösung von Farben für meinen Fall zu helfen, geschieht. Ich bin auch andere Strukturen zu schaffen, mir zu helfen die colorbar
den Weg plotten ich es will:
require(RColorBrewer)
mat.intervals <- cut(mat,breaks=6)
interval.mat <- matrix(mat.intervals,nrow=50,ncol=1000,dimnames=list(rownames(mat),colnames(mat)))
interval.cols <- brewer.pal(6,"Set2")
names(interval.cols) <- levels(mat.intervals)
require(reshape2)
interval.df <- reshape2::melt(interval.mat,varnames=c("gene","sample"),value.name="expr")
interval.cols2 <- rep(interval.cols, each=ncol(mat))
color.df <- data.frame(range=c(0:(2*length(interval.cols)-1)),colors=c(0:(2*length(interval.cols)-1)))
color.df <- setNames(data.frame(color.df$range,color.df$colors),NULL)
for (i in 1:(2*length(interval.cols))) {
color.df[[2]][[i]] <- interval.cols[[(i + 1)/2]]
color.df[[1]][[i]] <- i/(2*length(interval.cols))-(i %% 2)/(2*length(interval.cols))
}
Sie Art, wie ich die Daten, die ich weiß, dass die Proben 1-500 sind ein Cluster und Proben 501: 1000 sind die andere, so beschriften ich sie:
interval.df$cluster <- NA
interval.df$cluster[which(interval.df$sample %in% paste("s",1:500,sep="."))] <- "A"
interval.df$cluster[which(interval.df$sample %in% paste("s",501:1000,sep="."))] <- "B"
ich dachte, dass mit nicht Farbe und Intervall eine weiße Säule in der heatmap
Plot wird erstellen Zugabe einer Probe, die wie eine Facette Grenze aussehen:
divider.df <- data.frame(gene=unique(interval.df$gene),sample=NA,expr=NA,cluster=NA)
interval.df <- rbind(dplyr::filter(interval.df,cluster == "A"),divider.df,dplyr::filter(interval.df,cluster == "B"))
Und jetzt versuche ich Plotten:
#add ticks for each cluster
tick.vals <- c("s.158","s.617")
tick.text <- c("A","B")
require(plotly)
plot_ly(z=c(interval.df$expr),x=interval.df$sample,y=interval.df$gene,colors=interval.cols2,type="heatmap",colorscale=color.df,
colorbar=list(title="score",tickmode="array",tickvals=c(1:6),ticktext=names(interval.cols),len=0.2,outlinecolor="white",bordercolor="white",borderwidth=5,bgcolor="white")) %>%
layout(xaxis = list(title = 'Cluster',tickmode = 'array',tickvals = tick.vals,ticktext = tick.text))
Aber ich sehe keine Trennung zwischen den Clustern:
Jede Idee, wie man eine solche Facette Grenze zwischen den beiden Clustern zu erreichen?
Haben Sie versucht, 'plotly :: subplot' zu verwenden? Ich bemerke auch, dass deine * y * -Achse nicht geordnet ist, wie soll deine Heat Map interpretiert werden? –
Dies ist nur ein Beispiel, also habe ich mich nicht damit beschäftigt, die y-Achse im Code in diesem Beitrag zu bestellen. In Wirklichkeit würde es einen Clustering-Teil durchlaufen. Ich habe die Subplot-Option nicht ausprobiert. Werde versuchen – dan