[英]R dplyr: dealing with NA values and empty/missing rows when summarizing data by group
[英]R dplyr heatmap dealing with missing values
所以我在使用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。 但是,我认为这可能是前进的道路。 我会继续尝试,但任何帮助将不胜感激!
谢谢!
或者,您可以只添加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"))
您可以使用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")
结果看起来像这样:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.