相同值的 geom_col() 和 geom_point() 之间的区别

Difference between geom_col() and geom_point() for same value

所以,我试图在这里绘制缺失值随着时间的推移(纵向数据)。 我更愿意将它们放在 geom_col() 中,以便之后填充某些处理的颜色。但是由于某些奇怪的原因,geom_col() 给了我奇怪的值,而 geom_point() 使用相同的函数给了我正确的值。我正在努力思考为什么会这样。看看y-axis。 免责声明:

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

所以经过一番挖掘:

发生的事情是 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-06-02