2016-08-02 38 views
1

Neuer R-Benutzer hier. Ich versuche ein Dendrogramm zu dieser Heatmap hinzuzufügen, die ich mit ggplot2 erstellt habe. Wie kann ich das machen? Ich habe meinen Code zur Heatmap hinzugefügt.Hinzufügen eines Dendrogramms zu einer ggplot2-Heatmap

#Mtcars using ggplots and reshape2 
install.packages("ggplot2") 
library(ggplot2) 
intall.packages("reshape2") 
library(reshape2) 
data(mtcars) 
Cars <- mtcars[c(1:7)] #subset to 6 genres 

cor(Cars) # 6x6 cor matrix 

#ggplot likes the data 'melted' one value per row 
m <-melt(cor(Cars)) 
p <- ggplot(data=m, aes(x=Var1, y=Var2, fill=value)) + geom_tile() 
p 

#set up a coloring scheme using colorRampPalette 
red=rgb(1,0,0); green=rgb(0,1,0); blue=rgb(0,0,1); black=rgb(0,0,0) 
RtoBrange<-colorRampPalette(c(red, black)) 
BtoGrange<-colorRampPalette(c(black, green)) 

p <- p + scale_fill_gradient2(low=RtoBrange(100), mid="black",   high=BtoGrange(100)) 
p 

Danke für Ihre Hilfe,

Charlotte

+1

Vielleicht hilft dir das 'ggdendro'-Paket dabei? – Warner

+0

Es gibt ein großartiges Beispiel [hier] (https: // plot.ly/ggplot2/ggdendro-dendrograms /) mit 'ggdendro' und' plotly' –

+0

@MattSandgren Ich ermutige Sie, dendentend zu betrachten. Es hat eine Verzweigung zum Erstellen von Dendrogrammen mit ggplot2, die grafische Parameter wie die Farbe und Linienbreite des Baums erhalten. Siehe hier: https://cran.r-project.org/web/packages/deendendend/vignettes/introduction.html#ggplot2-integration –

Antwort

0

Verwenden Sie die heatmap.2 Funktion im gplots Paket (https://cran.r-project.org/web/packages/gplots/gplots.pdf), die automatisch ein Dendrogramm zu Ihrem Heatmap hinzufügt. Mit Ihrem Beispiel:

install.packages("gplots") 
library(gplots) 

data(mtcars) 
Cars <- mtcars[c(1:7)] 

mycolors <- colorRampPalette(c("red", "black", "green")) 
heatmap.2(cor(Cars), trace = "none", col = mycolors) 
2

Dies ist ein bisschen schwierig, da nicht alle Teile komplett fertig sind, aber es ist das Ziel der Arbeit, die ich in heatmaply begann zu diesem Punkt zu gelangen. Wenn Sie daran interessiert sind, mit plotly interaktive Heatmaps mit Dendrogramm zu erstellen, dann sollten Sie sich die heatmaply vignette ansehen.

Wenn Sie an einer statischen Heatmap interessiert sind, glaube ich, dass bestehende Pakete bereits einen guten Job machen, also ist es wahrscheinlich nicht wert, dieses Rad neu zu erfinden. Aber wenn dies noch ist das, was Sie tun möchten, sind hier die wichtigsten Schritte für sie:

  1. das Dendrogramm Objekt
  2. Grundstück das Dendrogramm Objekt in ggplot2
  3. schaffen die Heatmap in einer Art und Weise erzeugen das würde respektieren, die Reihenfolge der Zeilen (oder Spalten aus dem Dendrogramm
  4. die Objekte verschmelzen.

Schritt 1 hclust und as.dendrogram verwenden kann, Schritt 2 erfordert t er [as.ggdend][2] Funktion von dendextend. Schritt 3 kann mit heatmaply :: heatmapr + heatmaply ::: ggplot_heatmap durchgeführt werden (was derzeit verborgen ist, aber in Zukunft für diese Art von Dingen verfügbar sein wird). Schritt 4 ist knifflig, ich konnte es bisher nicht "gut genug" zum Arbeiten bringen, da die Proportionen der Elemente nicht gut sind.

Ich wickelte dies in eine neue ggheatmap-Funktion und lud es einfach auf heatmaply on github. Aber das erfordert mehr Arbeit, also bin ich offen für Anfragen. In der Zwischenzeit ist hier, wie es geht:

devtools::install_github("ropensci/plotly") # you will probably benefit from the latest version of plotly 
devtools::install_github('talgalili/heatmaply') 

library(heatmaply) 
x <- heatmapr(iris[,-5], scale = "column", colors = "Blues") 
ggheatmap(x) 

Die Ausgabe sieht wie folgt aus:

enter image description here

Da ich GGally::ggmatrix bin mit scheine ich nicht die Proportionen der einzelnen zu steuern Objekt. Es gibt wahrscheinlich mehr in anderer Hinsicht zu tun (wie mit dem Layout der Etiketten zu tun, das Hinzufügen von Farbe Legende auf der Seite - etc.)

+0

Ich habe ein Problem eingereicht: https://github.com/ggobi/ggally/issues/ 188 –

+0

'ggheatmap' ist nicht mehr in' heatmaply', oder? es war in der Version '0.8.3' aber nicht in der aktuellen' 0.11.1' – deeenes

+0

Hi @deeenes das ist richtig. Die ggheatmap-Funktion wurde entfernt, da sie nicht ausreichend poliert wurde. Sie können die interaktive heatmaply-Ausgabe jedoch mithilfe des Arguments "file" in einer statischen Datei speichern. Ich fügte auch ein Problem hinzu, um möglicherweise ggheatmap zurück in der Zukunft hinzuzufügen ... https://github.com/talgalili/heatmaply/issues/108 –

0

Oder versuchen, die heatmap3 Funktion:

library(heatmap3) 
Cars <- mtcars[c(1:7)] 
heatmap3(cor(Cars), scale = "none", sym = T) 

enter image description here

+0

heatmap3 ist groß - aber es basiert nicht auf ggplot2 –

+0

Ja, Sie sind absolut richtig. Vielleicht will er das Rad nicht neu erfinden. Ansonsten scheint Ihre Vorgehensweise die Lösung zu sein. – Jimbou

+0

Einverstanden. :) (Ich würde auch lieber eine der vorhandenen Lösungen verwenden) –