所以我在使用geom_tile()和dplyr包绘制热图时遇到了一个小问题。我认为这是一个简单的解决方案,但我还没能在任何地方找到答案。抱歉,如果有一个,我就错过了。
所以下面的代码是一个简单的例子:
Trivial <- tibble(
Name1 = c("a","b","c"),
Name2 = c("x","y","z"),
Value = c(1,2,3)
)
Trivial %>%
ggplot(aes(Name1, Name2)) +
geom_tile(aes(fill = Value)) +
scale_fill_gradient(low = "white", high = "green")
由此产生的热图显示灰色/空白空间,其中没有Name1和Name2组合的信息。有没有办法代替显示空白,我可以用白色(或任何其他颜色)填充它?或者,我可以在情节上加上“NA”来表明这些空格确实是空白的吗?
我尝试在scale_fill_gradient中使用na.value参数,但它不起作用。我假设因为表中没有NA。但是,我认为这可能是一种前进的方式。我会继续尝试,但任何帮助将不胜感激!
谢谢!
答案 0 :(得分:2)
或者您只需添加them_classic()
。
Trivial %>%
ggplot(aes(Name1, Name2)) +
geom_tile(aes(fill = Value)) +
scale_fill_gradient(low = "gray", high = "green") +
theme_classic()
我刚用low= "gray"
因为背景为白色。
你也可以改变背景:
Trivial %>%
ggplot(aes(Name1, Name2)) +
geom_tile(aes(fill = Value)) +
scale_fill_gradient() +
theme_classic() +
theme(panel.background = element_rect(fill = "white", colour = "white"))
答案 1 :(得分:1)
您可以使用expand()
中的tidyr
获取Name1
和Name2
的所有组合,然后使用NA
填充所有0
,然后绘制热图:
library(tidyr)
Trivial %>% expand(Name1, Name2) %>%
left_join(Trivial, by = c("Name1", "Name2")) %>%
mutate( Value = ifelse(is.na(Value), 0, Value)) %>%
ggplot(aes(Name1, Name2)) +
geom_tile(aes(fill = Value)) +
scale_fill_gradient(low = "white", high = "green")
结果如下: