仅使用一个点

时间:2016-05-24 19:20:22

标签: r ggplot2

我遍历多个数据集以生成每个集合的线图。当我使用ggplot超过一点时,如何防止geom_line抱怨?

例如,以下数据:

mydata = data.frame(
  x = c(1, 2),
  y = c(2, 2),
  group = as.factor(c("foo", "foo"))
)

创建折线图看起来很好,因为该行中有两点:

ggplot(mydata, aes(x = x, y = y)) + 
  geom_point() + 
  geom_line(aes(group = group))

然而,只绘制第一行给出了消息:

  

geom_path:每组只包含一个观察。你需要调整群体审美吗?

ggplot(mydata[1,], aes(x = x, y = y)) + 
      geom_point() + 
      geom_line(aes(group = group))

我的一些数字只会有一个点,而这些消息会导致产生这些数字的更大脚本中的挂起。我知道情节仍然有效,所以我的担忧是避免这个消息。如果出现其他合法且意外的问题,我还是希望尽可能避免使用suppressWarnings()

3 个答案:

答案 0 :(得分:1)

this question的回答:suppressMessages(ggplot())失败,因为你必须将它包装在ggplot对象的print()调用周围 - 而不是ggplot对象本身。这是因为警告/消息仅在绘制对象时发生。

因此,要在没有警告消息的情况下查看您的情节:

p <- ggplot(mydata[1,], aes(x = x, y = y)) + 
  geom_point() + 
  geom_line(aes(group = group))

suppressMessages(print(p))

答案 1 :(得分:0)

我认为以下if - else解决方案可以解决问题:

if (nrow(mydata) > 1) {
    ggplot(mydata, aes(x = x, y = y)) + 
        geom_point() + 
        geom_line(aes(group = group))
} else {
    ggplot(mydata, aes(x = x, y = y)) + 
        geom_point()
}

答案 2 :(得分:0)

community.RStudio.com上,John Mackintosh提出了一个对我有用的解决方案:

自由引用:

与其取消警告,不如稍微更改绘图层。

  1. 用Facet包裹以创建空图

  2. 为整个数据框添加geom_point

  3. 通过创建一个包含多个数据点的组的向量,并对这些组的原始数据进行过滤,来对数据帧进行分组。只要 为该子集绘制线。

上面链接的后续内容中的详细信息和示例代码。