R dplyr处理缺失值的热图
因此,在使用geom_tile()和dplyr包绘制热图时,我遇到了一个小问题。我假设这是一个简单的解决方案,但我还没有在任何地方找到答案。抱歉,如果有一个在那里,我只是错过了它 下面的代码是一个简单的例子:R dplyr处理缺失值的热图,r,dplyr,heatmap,R,Dplyr,Heatmap,因此,在使用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)) + g
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")
微不足道的%
ggplot(aes(名称1、名称2))+
geom_瓷砖(aes(填充=值))+
比例填充梯度(低=白色,高=绿色)
由此生成的热图显示灰色/空白区域,其中没有名称1和名称2组合的信息。有没有办法用白色(或任何其他颜色)来代替显示空白?或者,我可以在情节上加上一个“NA”来表示这些空白确实是空白的吗
我曾尝试在scale\u fill\u gradient中使用na.value参数,但它不起作用。我假设,因为表中没有NAs。然而,我认为这可能是一条前进的道路。我会继续尝试,但任何帮助都将不胜感激
谢谢大家! 您可以使用expand()
fromtidyr
获取Name1
和Name2
的所有组合,然后用0
填充所有NA
,然后绘制热图:
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")
结果如下所示:
您可以使用tidyr
中的expand()
获取Name1
和Name2
的所有组合,然后用0
填充所有NA
,然后绘制热图:
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")
结果如下所示:
或者您可以添加
它们\u 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"))
或者您可以添加
它们\u 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"))
你知道这将如何扩展到数千种组合吗?它将扩展到ok ish,我想乔治提供的答案是一种更有效的方式。是的,两个答案都有效,我只是想找出在我的真实场景中哪一个最适合实施……我更喜欢这个解决方案,所以现在就实施它。然而,如果可伸缩性被证明是一个问题,我可能需要重新考虑。谢谢你的帮助:)你知道这将如何扩展到数千个组合吗?它将扩展到ok ish,我想乔治提供的答案是一种更有效的方式。是的,两个答案都有效,我只是想找出哪一个最适合在我的真实场景中实现…我更喜欢这个解决方案,因此,我们现在将实施它。然而,如果可伸缩性被证明是一个问题,我可能需要重新考虑。谢谢你的帮助:)