2013-01-12 28 views
21

Ja widać Strefy o wartościach wykonane w różnych układach, w tym graficznych R siatki i zasady, jak to:termiczna z wartościami (ggplot2)

enter image description here

że zazwyczaj wykorzystuje ggplot2 kawałka i chciałby mieć w stanie stworzyć mapę cieplną z naniesionymi odpowiednimi wartościami komórek. Poniżej znajduje się mapa ciepła i próbą używając 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) 

Normalnie mogę zorientować się w wartości X i Y, aby przejść, ale nie wiem, w tym przypadku, ponieważ ta informacja nie jest przechowywana w zbiorze danych. Jak mogę umieścić tekst na mapie termicznej?

+3

[ this] (http://stackoverflow.com/questions/11599023/r-ordering-the-axis-labels-in-a-ggplot-geom-tile-plot) pytanie ma przykład użycia tekstu z geom_til e może to być przydatne. Przenieś swoje wywołanie funkcji aes() z geom_tile do geom_text – SlowLearner

+1

wypróbuj 'heatmap.2'. odnoszą się do podobnego postu http://stackoverflow.com/questions/3789549/display-a-matrix-include-values-as-a-heatmap – Puriney

+0

@SlowLearner, działało idealnie. Dziękuję Ci. –

Odpowiedz

55

ta została zaktualizowana w celu dostosowania do tidyverse zasad i poprawić słabe wykorzystanie ggplot2

komentarz Per SlowLeraner za I był w stanie łatwo to zrobić:

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

Nadal przydatne! Otrzymałem ostrzeżenie (w ggplot2 v. 2.2.0) 'Ignorowanie nieznanej estetyki: wypełnij. Trochę majsterkowania pokazało, że przedostatnia linia nie potrzebuje wartości wypełnienia. W ten sposób powstaje dla mnie ten sam wynik, bez żadnego ostrzeżenia: 'geom_text (label = round (dat2 $ value, 1)))' – Gabriel

+0

@Gabriel wszystko było nieaktualne, więc zaktualizowałem je –

+0

genialne, dziękuję bardzo. Jest tam pewna składnia, której nie rozpoznaję ... Czas na szukanie w Google. – Gabriel

Powiązane problemy