【问题标题】:Difference between geom_col() and geom_point() for same value相同值的 geom_col() 和 geom_point() 之间的差异
【发布时间】:2021-05-31 16:39:22
【问题描述】:

所以,我正在尝试随时间在此处绘制缺失值(纵向数据)。 我更愿意将它们放在 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

对于 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

【问题讨论】:

  • 欢迎来到 SO。这通常不是一个坏问题 - 但是,如果有一个可重复的例子会有所帮助 - 请参阅我的答案以了解一种方法。几乎没有任何问题无法用假数据重现,它可以帮助我们帮助您

标签: r ggplot2 dplyr missing-data


【解决方案1】:

问题是您正在使用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 日创建

【讨论】:

  • 感谢您的解释!有意义的是,这些点只是绘制在彼此之上。他们 geom_col() 总结了它们。还不知道 distinct() 函数。谢谢!
【解决方案2】:

所以经过一番挖掘:

发生的情况是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2019-10-02
    • 2011-07-30
    • 2016-05-26
    • 2018-05-15
    相关资源
    最近更新 更多