2013-01-12 14 views
21

I Heatmaps mit Werten in verschiedenen R-Grafiksystemen einschließlich Gitter und Base, wie dies gemacht gesehen habe:Heatmap mit Werten (ggplot2)

enter image description here

Ich neige dazu, ggplot2 ein bisschen zu verwenden und möchten sein in der Lage, eine Heatmap mit den entsprechenden Zellwerten zu erstellen. Hier ist die Heatmap und ein Versuch mit geom_text:

library(reshape2, ggplot2) 
dat <- matrix(rnorm(100, 3, 1), ncol=10) 
names(dat) <- paste("X", 1:10) 
dat2 <- melt(dat, id.var = "X1") 
p1 <- ggplot(dat2, aes(as.factor(Var1), Var2, group=Var2)) + 
    geom_tile(aes(fill = value)) + 
    scale_fill_gradient(low = "white", high = "red") 
p1 

#attempt 
labs <- c(apply(round(dat[, -2], 1), 2, as.character)) 
p1 + geom_text(aes(label=labs), size=1) 

Normalerweise kann ich die x- und y-Werte herauszufinden, passiert aber ich weiß nicht in diesem Fall wissen, da diese Informationen nicht in dem Datensatz gespeichert wird. Wie kann ich den Text auf der Heatmap platzieren?

+3

[ this] (http://stackoverflow.com/questions/11599023/r-ordering-the-axis-labels-in-a-ggplot-geom-tile-plot) Frage hat ein Beispiel für die Verwendung von Text mit geom_til Das könnte nützlich sein. Verschiebe deinen aes() - Aufruf von geom_tile nach geom_text – SlowLearner

+1

versuche 'heatmap.2'. beziehen sich auf ähnliche Post http://StackOverflow.com/Questions/3789549/Display-Amatrix- einschließlich-die-Values-as-Aheatmap – Puriney

+0

@SlowLearner, hat perfekt funktioniert. Vielen Dank. –

Antwort

55

Dies wurde aktualisiert Prinzipien entsprechen tidyverse und schlechte Nutzung von ggplot2

Kommentar Per SlowLeraner der Verbesserung war ich leicht in der Lage, dies zu tun:

library(tidyverse) 

## make data 
dat <- matrix(rnorm(100, 3, 1), ncol=10) 

## reshape data (tidy/tall form) 
dat2 <- dat %>% 
    tbl_df() %>% 
    rownames_to_column('Var1') %>% 
    gather(Var2, value, -Var1) %>% 
    mutate(
     Var1 = factor(Var1, levels=1:10), 
     Var2 = factor(gsub("V", "", Var2), levels=1:10) 
    ) 

## plot data 
ggplot(dat2, aes(Var1, Var2)) + 
    geom_tile(aes(fill = value)) + 
    geom_text(aes(label = round(value, 1))) + 
    scale_fill_gradient(low = "white", high = "red") 

enter image description here

+0

Noch nützlich! Ich erhielt eine Warnung (in ggplot2 v. 2.2.0) 'Ignoring unknown aesthetics: fill'. Ein bisschen Basteln zeigte, dass die vorletzte Zeile keinen Füllwert benötigt. Also erzeugt dies die gleiche Ausgabe für mich, ohne jede Warnung: 'geom_text (label = rund (dat2 $ value, 1)))' – Gabriel

+0

@Gabriel das Ganze war veraltet, also habe ich es aktualisiert –

+0

brilliant, vielen Dank. Da ist eine Syntax drin, die ich nicht erkenne ... Zeit zum googeln. – Gabriel