【问题标题】:r: can't plot dataframe with NAs [duplicate]r:无法使用 NA 绘制数据框 [重复]
【发布时间】:2017-06-16 20:16:32
【问题描述】:

(之前发布过,忘记包含可重现的示例。)

我用左连接合并了两个数据框,形成了一个相当大的数据框。我现在正在尝试使用 ggplot2 绘制数据框中的两列,但其中一列似乎没有正确绘制图形。它在 x = 400 处结束,即使它有很多 x 值超过 400 的 y 值。

这是一些示例数据。这是一个较大数据框的示例,因此图表看起来会很奇怪。

irradiance <- data.frame(
    lambda = c(337, 337.5, 338, 400, 400.5, 401, 401.5, 650, 650.5, 651),
    date = as.Date("2016-07-19"),
    Local_irrad = c(.159, .175, .182, .315, .326, .335, .342, .248, .246, .248),
    Global_horizn_irradiance = c(.4942, .5295, .5682, 1.232, NA, 1.281, NA, 1.249, NA, 1.326))

lambda  date        Local_irrad  Global_horizn_irradiance
337     7/19/2016   0.159        0.4942
337.5   7/19/2016   0.175        0.5295
338     7/19/2016   0.182        0.5682
400     7/19/2016   0.315        1.232
400.5   7/19/2016   0.326        NA
401     7/19/2016   0.335        1.281
401.5   7/19/2016   0.342        NA
650     7/19/2016   0.248        1.249
650.5   7/19/2016   0.246        NA
651     7/19/2016   0.248        1.326

有很多 NA 值,但也有很多“真实”值。也许 NA 以某种方式抛弃它?这是图表(可能与您的数据不完全相同)。如您所见,Global_horizo​​n_irradiance 以 400 结束:

这是我的代码:

ggplot(irradiance, aes(x=lambda)) + geom_line(aes(y=Global_horizn_irradiance), color="red") + geom_line(aes(y=Local_irrad), color="blue")

【问题讨论】:

  • 一行是连续的段,每个段由两个连续的非 NA 值定义,一个 NA 定义一个中断。您在 400 之后没有两个非 NA 连续值。
  • @StéphaneLaurent 是正确的。我没有意识到如果没有 2 个连续的非 NA 值,这些行会完全停止——我认为它会跳过那个特定的值,然后再继续。谢谢! Stéphane,如果您发表评论作为答案,我会接受。

标签: r ggplot2


【解决方案1】:

geom_line 忽略了NA 的值,所以红线的 x 轴映射被破坏了。如果您希望它们匹配,您可能必须改用geom_point

> ggplot(irradiance, aes(x=lambda)) + 
+ geom_point(aes(y=Global_horizn_irradiance), color="red") + 
+ geom_point(aes(y=Local_irrad), color="blue")
Warning message:
Removed 3 rows containing missing values (geom_point). #notice that your original call doesn't generate this warning

【讨论】:

    【解决方案2】:

    正如@StéphaneLaurent 评论的那样,geom_line 定义了带有 NA 分解线段的线段。您可以手动删除带有 NA 的行,如下所示以给出连续图:

    ggplot(irradiance, aes(x=lambda)) + geom_line(data=subset(irradiance, !is.na(Global_horizn_irradiance)), aes(y=Global_horizn_irradiance), color="red") + geom_line(aes(y=Local_irrad), color="blue")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 2022-01-13
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2018-04-08
      相关资源
      最近更新 更多