将ggplot2中的NA值保留在R中

将ggplot2中的NA值保留在R中,r,ggplot2,na,R,Ggplot2,Na,我以为这会很容易。。。但找不到解决办法。 我试图在R中生成一个ggplot2,它与col1和col2之间有相关性,点的大小与col3有关,形状与col4有关。col3和col4具有NA/缺失值。运行下面的代码时,ggplot2会删除没有匹配col3和/或col4的行,但是,我希望保留这些行和颜色代码。输出低于 数据帧示例: 警告: 删除了包含缺失值的3行(几何点) 我试图用is.na(df$col3 | df$col4)创建另一个geom_点,但这不起作用 已尝试在中添加na.rm=FALSE

我以为这会很容易。。。但找不到解决办法。 我试图在R中生成一个ggplot2,它与col1和col2之间有相关性,点的大小与col3有关,形状与col4有关。col3和col4具有NA/缺失值。运行下面的代码时,ggplot2会删除没有匹配col3和/或col4的行,但是,我希望保留这些行和颜色代码。输出低于

数据帧示例:

警告: 删除了包含缺失值的3行(几何点)

  • 我试图用is.na(df$col3 | df$col4)创建另一个geom_点,但这不起作用
  • 已尝试在中添加na.rm=FALSE
  • 尝试
  • 但是,我在#2和#3中以“忽略未知美学:na.rm”结尾,而#1给出了一个错误。 而且,这并不能解决col4形状也被删除的问题

    ggplot(df, aes(x=df$col1, y=df$col2)) + 
        geom_point(aes(size=df$col3, col=df$col4), na.rm=FALSE) + 
        theme_classic() + 
        scale_size(range = c(0.25,4)) 
                 
    

    请查看以下链接:

    顺便说一句,你的解释很清楚你想要实现什么。我看到问题将与Col3和Col4中没有值时使用的形状和颜色有关。也许试着像这样解决它,比如

    当NAN出现在Col3和Col4中时,颜色和形状就是Col1和Col2的相关性


    另一个测试是使用geom_miss_point

    有几点需要注意-我想我已经理解OP在这里想要做什么了。在这种情况下,需要打印所有点。我将陈述我们希望情节看起来如何:

    • col1
      用于绘制x轴
    • col2
      用于绘制y轴
    • col3
      用于控制点的大小
    • col4
      用于控制点的颜色
    我们在
    col3
    col4
    中有
    NA
    值。那怎么处理这些呢?好的,对于颜色,我将把它们标记并包括在图例中,颜色编码并标记为“NA”。尺寸呢?嗯,
    size=NA
    没有任何意义,所以我认为对
    df$col3==NA
    最好的办法是改变形状。以下是我所做的:

    ggplot(df, aes(x=col1, y=col2, color=col4)) +
      geom_point(aes(size=col3, shape='Not NA')) +
      geom_point(data=subset(df, is.na(col3)), aes(shape='NA'), size=3) +
      scale_shape_manual(values=c('NA'=3, 'Not NA'=19)) +
      theme_classic()
    

    首先,通过
    data.frame$column.name
    引用列是一种不好的形式-您应该只使用列名本身

    颜色很简单-我们只需将
    Color=col4
    放在顶部
    aes()
    规范中,因为它适用于所有几何图形

    对于形状,这里最简单的方法可能是在对
    geom_point()
    的两个单独调用中指定。一个是没有任何规范,这将自然删除任何
    NA
    s-您将不会得到使用
    size=NA
    绘制的点。要“添加回”NA点,我们必须明确地将其拉出并指定大小。最后,为了在图例中获得形状美感,我们需要将其放入
    aes()
    中。这里的一般规则是,如果将美学设置为等于
    aes()
    中的列名,它将使用该列中的值进行标记。如果您像我们在这里所做的那样在
    aes()
    中键入一个字符,那么geom调用中的所有项目都将标记该字符,但图例已创建。因此,我们基本上是在这里为
    shape
    创建自己的自定义图例

    然后只需使用
    scale\u shape\u manual()
    value
    参数的命名向量来设置我们想要使用的实际形状

    编辑 再想一想,NA出现在颜色和形状的图例中是没有意义的,所以让我们将其从颜色中删除。这是通过将
    col3
    中包含NAs的数据集与不包含NAs的数据集完全分离来实现的:

    ggplot(df, aes(x=col1, y=col2, color=col4)) +
      geom_point(data=subset(df, !is.na(col3)), aes(size=col3, shape='Not NA')) +
      geom_point(data=subset(df, is.na(col3)), aes(shape='NA'), size=3) +
      scale_shape_manual(values=c('NA'=3, 'Not NA'=19)) +
      theme_classic()
    

    完成。添加的示例对于具有col1和col2值但不具有col3和col4值的点,您希望显示什么?是否仍希望这些内容显示在绘图上?如果是的话。。。他们会被贴上NA的标签,对吗?是的。我希望所有10个点都显示出来,但您希望在图例中如何标记它们?你想让它们出现在传说中吗?不想?任何类型的标签,只要未移除。可能变灰了?谢谢你的回复。我用输出和一个例子更新了问题。谢谢你的回答。为了适应更大的数据集,我尝试了一下。这很有效。不过,有两个问题需要澄清:谢谢你的回答。为了适应更大的数据集,我尝试了一下。这很有效。然而,有几个问题需要澄清:1)shape=“Not NA”和“NA”令人困惑。这是R中的正则表达式吗?我知道NA没有报价单。但“非NA”在我的数据中没有定义。2) “缩放形状”手册是否只是编辑图例的形状尺寸?3) 我在末尾添加了scale_size(range=c(0.25,4))以减小点的大小(因为我有10000行)。这是多余的功能吗?看起来不是这样。非常感谢。
    shape=“Not NA”
    不是作为逻辑表达式计算的。它只是为整个数据集提供一个名称。最好的考虑方法是:通常
    shape=col1
    将引用数据中某列的名称,然后从该列数据中绘制标签作为因子(或连续)。当您将其更改为
    shape=“col1”
    时,它不会引用列,而是。。。在您的数据集中,所有值都等于
    “col1”
    ,有点像“生成另一个”。如果是这种情况,并且您引用了这一列,那么您会将所有内容都标记为“col1”。有点像这样。
    scale\uuu
    两个函数都指定了您希望
    ggplot
    如何控制该比例。
    aes()
    部分指定如何将其映射出来,如果不指定
    比例
    ,它将猜测最佳的区分方式。如果要更改默认形状、颜色等,则需要使用一些
    scale\函数指定
    
    +-------------+-------------+-------------+----------+
    |    col1     |    col2     |    col3     |   col4   |
    +-------------+-------------+-------------+----------+
    | 0.254393811 | 0.124242905 | NA          | NA       |
    |  0.28223149 | 0.148601748 | 0.236953099 | CD8CTL   |
    | 0.205945835 | 0.074541695 | NA          | NA       |
    | 0.199758631 | 0.103369485 | NA          | CD8Mem   |
    |   0.2798128 | 0.109511863 | 0.396113132 | CD8STAT1 |
    | 0.254616042 | 0.059495241 | 0.479590212 | CD8CTL   |
    | 0.197929395 |  0.10993698 | 0.272611442 | CD8CTL   |
    | 0.294888359 |  0.12319682 | 0.16069263  | CD8CTL   |
    | 0.191407446 | 0.086443936 | 0.36596486  | CD8CTL   |
    | 0.267533392 |  0.11240525 | 0.344659516 | CD8CTL   |
    +-------------+-------------+-------------+----------+
    
    ggplot(df, aes(x=col1, y=col2, color=col4)) +
      geom_point(aes(size=col3, shape='Not NA')) +
      geom_point(data=subset(df, is.na(col3)), aes(shape='NA'), size=3) +
      scale_shape_manual(values=c('NA'=3, 'Not NA'=19)) +
      theme_classic()
    
    ggplot(df, aes(x=col1, y=col2, color=col4)) +
      geom_point(data=subset(df, !is.na(col3)), aes(size=col3, shape='Not NA')) +
      geom_point(data=subset(df, is.na(col3)), aes(shape='NA'), size=3) +
      scale_shape_manual(values=c('NA'=3, 'Not NA'=19)) +
      theme_classic()