热力图加数字的ggvis实现

8

我正在尝试使用ggvis从ggplot2中复制带有数字的热力图。ggplot2版本为

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") 

看起来是这个样子的 在此输入图片描述

我在ggvis中的版本为

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) 

结果并不完美。

输入图片描述

我尝试通过手动添加边距来修复数字对齐问题,但这种情况无法调整大小。

有什么想法吗?

2个回答

2

一种解决方法是使用xcenterycenter比例尺:

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
layer_text() 中,尝试使用 align:="left"。这似乎在 this example 中有效。

我也尝试过这个。但还是不一样。我会说这是可以接受的,但不是完美的热力图。 - kismsu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接