【问题标题】:ggplot2: geom_point is sometimes removing NA values depending on the aesthetic usedggplot2:geom_point 有时会根据所使用的美学删除 NA 值
【发布时间】:2020-06-12 22:17:54
【问题描述】:

我正在同一个图上的相关矩阵中绘制相关系数r 和样本大小n(上三角中的r,下三角中的n)。通常我对 ggplot2 在绘图之前删除我的 NA 没有任何问题,但在这种情况下,它只是删除 NAsome 的时间,我不知道为什么。我正在使用 ggplot2 的 3.2.1 版本。

一个示例数据框:

library(ggplot2)
library(dplyr)

ex <- data.frame(x1 = c(rep("2010", 3), rep("2011", 3), rep("2012", 3)),
                 x2 = rep(c("2010", "2011", "2012"), 3),
                 r = c(NA, 0.5, 0.2, NA, NA, 0.1, NA, NA, NA),
                 n = c(NA, NA, NA, 25, NA, NA, 70, 50, NA))

当我运行这个图表时,以尺寸为美学,NAs 会自动从两个几何图形中删除:

ex %>%
  ggplot(aes(x1, x2))+
  geom_point(aes(size = r))+
  geom_text(aes(label = n))

但是,当我运行这个图表时,以颜色作为审美,NAs 只从geom_text 中删除,而不是geom_point

ex %>%
  ggplot(aes(x1, x2))+
  geom_point(aes(color = r), size = 6)+
  geom_text(aes(label = n))

stackoverflow question 不适用,因为我确实想要过滤掉行。我还尝试将x1x2r 更改为基于this 的字符,但它也不起作用

ex %>%
  ggplot(aes(as.character(x1), as.character(x2)))+
  geom_point(aes(color = as.character(r)), size = 6, na.rm = T) +
  geom_text(aes(label = n))

有没有办法让色彩美学忽略 NA?

【问题讨论】:

  • 这两个几何图形不一定具有相同的美学。他们继承了最初的ggplot 调用中的任何内容,然后他们知道您在geom_textgeom_point 中分配的内容,但他们彼此之间不交谈。因此,如果 r 是 NA 但 n 不是,那只会影响这一点,反之亦然。一些问题是没有明确的替代方案:对于颜色,将缺失值设为灰色是有意义的,但您希望 NA 的大小是多少?
  • 顺便说一句,您可以使用来自repeach 参数,如下所示:rep(2010:2012, each = 3)

标签: r ggplot2 na


【解决方案1】:

您可以为色标设置na.value 值。如果将其设置为NA,则不显示缺失点:

ex %>%
  ggplot(aes(x1, x2))+
  geom_point(aes(color = r), size = 6)+
  geom_text(aes(label = n)) + 
  scale_color_gradient(na.value = NA)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    相关资源
    最近更新 更多