2014-07-11 13 views
8

Próbuję odtworzyć mapę ciepła liczbami z ggplot2 w ggvis. wersja ggplot2 jestMapa ciepła z liczbami w ggvis

library(ggplot2) 
hec <- as.data.frame(xtabs(Freq ~ Hair + Eye, HairEyeColor)) 
ggplot(hec, aes(Hair, Eye)) + 
geom_tile(aes(fill = Freq)) + 
geom_text(aes(label = Freq),colour="white") 

i wygląda na to, że enter image description here

moja wersja w ggvis jest

hec%>% 
ggvis(~Hair, ~Eye, fill=~Freq)%>% 
layer_rects(width = band(), height = band()) %>% 
layer_text(text:=~Freq,fontSize := 20, fill:="white",baseline:="top",align:="center") %>% 
scale_nominal("x", padding = 0, points = FALSE) %>% 
scale_nominal("y", padding = 0, points = FALSE) 

a wynik nie jest doskonały

enter image description here

Próbowałem naprawić wyrównanie liczb przez ręczne dodawanie marginesów, ale w tym przypadku nie można zmienić rozmiaru.

Wszelkie pomysły?

Odpowiedz

2

Jeden obejście jest użycie xcenter i ycenter skale:

hec <- as.data.frame(xtabs(Freq ~ Hair + Eye, HairEyeColor)) 

hec%>% 
    ggvis(~Hair, ~Eye, fill=~Freq) %>% 
    layer_rects(width = band(), height = band()) %>% 
    layer_text(
    x = prop("x", ~Hair, scale = "xcenter"), 
    y = prop("y", ~Eye, scale = "ycenter"), 
    text:=~Freq, fontSize := 20, fill:="white", baseline:="middle", align:="center") %>% 
    scale_nominal("x", padding = 0, points = FALSE) %>% 
    scale_nominal("y", padding = 0, points = FALSE) %>% 
    scale_nominal("x", name = "xcenter", padding = 1, points = TRUE) %>% 
    scale_nominal("y", name = "ycenter", padding = 1, points = TRUE) 
+0

Fajnie, dziękuję – kismsu

0

W layer_text(), spróbuj align:="left". To wydawało się działać w this example.

+0

Próbowałem to za dobrze. Nadal nie to samo. Nazwałbym to akceptowalną, ale nie idealną mapą cieplną. – kismsu

Powiązane problemy