I'm trying to replicate the heat map with numbers from ggplot2 in ggvis. ggplot2 version is
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")
and it looks like that
My version in ggvis is
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)
and the result is not perfect
I've tried to fix numbers align by manually adding margins, but this case is not resizeable.
Any ideas?
One workaround is to use xcenter
and ycenter
scales:
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)