微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

相同值的 geom_col() 和 geom_point() 之间的差异

如何解决相同值的 geom_col() 和 geom_point() 之间的差异

所以,我试图在此处绘制随时间推移的缺失值(纵向数据)。 我更愿意将它们放在 geom_col() 中,以便在之后填充某些处理的颜色。但是出于某种奇怪的原因, geom_col() 给了我奇怪的值,而 geom_point() 使用相同的函数给了我正确的值。我想弄清楚为什么会发生这种情况。看一下y轴。 免责声明:

  • 我知道缺失值会在第 19-20 天消失。这就是我制作情节的原因。
  • 对情节的布局感到抱歉。还没有打磨。

对于 geom_point:

gaussian_transformed %>% group_by(factor(time)) %>% mutate(missing = sum(is.na(Rose_width))) %>% ggplot(aes(x = factor(time),y = missing)) + geom_point()

图片:geom_point

enter image description here

对于 geom_col:

gaussian_transformed %>% group_by(factor(time)) %>% mutate(missing = sum(is.na(Rose_width))) %>% ggplot(aes(x = factor(time),y = missing)) + geom_col()

图片:geom_col

enter image description here

解决方法

所以经过一些挖掘:

发生的情况是 geom_col() 函数总结了所有缺失的值,而 geom_point() 没有。因此 y 的值很大。为什么会这样,我不知道。但是,执行以下操作对我来说很好:

gaussian_transformed$time <- as.factor(gaussian_transformed$time)
gaussian_transformed %>% group_by(time) %>% summarise(missing = sum(is.na(Rose_width))) -> gaussian_transformed
gaussian_transformed %>% ggplot(aes(x = time,y = missing)) + geom_col(fill = "blue",alpha = 0.5) + theme_minimal() + labs(title = "Missing values in Gaussian Outcome over the days",x = "Time (in days)",y = "Amount of missing values") + scale_y_continuous(breaks = seq(0,10,1))

随着情节:GaussianMissing

,

问题在于您正在使用 mutate 并为您的组创建多行。您看不到,但是您的 geom_point 图中会有很多点重叠。

一种方法是使用 summarise,或者您使用 distinct 比较

library(tidyverse)
msleep %>% group_by(order) %>% 
  mutate(missing = sum(is.na(sleep_cycle))) %>% 
  ggplot(aes(x = order,y = missing)) + 
  geom_point()

这些点看起来很难看,因为有很多过度绘制。

msleep %>% group_by(order) %>% 
  mutate(missing = sum(is.na(sleep_cycle))) %>% 
  distinct(order,.keep_all = TRUE) %>%
  ggplot(aes(x = order,y = missing)) + 
  geom_col()

msleep %>% group_by(order) %>% 
  mutate(missing = sum(is.na(sleep_cycle))) %>% 
  ggplot(aes(x = order,y = missing)) + 
  geom_col()

reprex package (v2.0.0) 于 2021 年 6 月 2 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。