【问题标题】:Omitting NA values from ggplot when using multiple dataframes to plot multiple lines使用多个数据框绘制多条线时从 ggplot 中省略 NA 值
【发布时间】:2021-05-08 19:38:20
【问题描述】:

我的数据框有时包含 NA 值。这些以前是空白字符,例如“BAD”之类的字符或来自导入的 .csv 文件的实际“NA”字符。我已将数据框中的所有内容更改为数字 - 这会将所有非数字字符更改为 NA。到目前为止,一切顺利。

我知道我可以使用以下数据框“df”来确保始终在数据点之间绘制一条线,确保没有间隙:

ggplot(na.omit(df), aes(x=Time, y=pH)) +
  geom_line()

但是,有时我希望使用 ggplot2 绘制 2 个或更多数据框来获得单个图。我这样做是因为我的 x 轴(时间)对于所有数据帧确实是相同的,但具体数字不同。我在合并这些数据帧时遇到了巨大的麻烦,因为行不相等。否则我会合并、融合数据并像往常一样使用 ggplot2 来制作多线线图。

从那以后我了解到您可以在 ggplot 上的“geom 级别”手动绘制多个数据框:

ggplot() + 
  geom_line(df1, aes(x=Time1, y=pH1), colour='green') + 
  geom_line(df2, aes(x=Time2, y=pH2), colour='red') +
  geom_line(df3, aes(x=Time3, y=pH3), colour='blue') +
  geom_line(df4, aes(x=Time4, y=pH4), colour='yellow')

但是,我现在如何确保省略 NA 值并连接线路?!这一切似乎都有效,但我的 4 个地块在 NA 值所在的地方有差距!

我是 R 的新手,但到目前为止我很享受它,并且意识到通常有多种解决方案可以解决一个问题。任何帮助或建议表示赞赏。

编辑(供以后看到此内容的任何人使用)

所以,在玩了 30 分钟后,我意识到我可以首先在每个数据帧上分别使用 no.omit 函数,命名这些新对象,然后将它们绘制在 ggplot 上。这工作正常。另外,如果我想要一个合适的图例,上面的代码还是不正确的。

新的、正确的代码:

df1.omit <- na.omit(df1)
df2.omit <- na.omit(df2)
df3.omit <- na.omit(df3)
df4.omit <- na.omit(df4)

ggplot() + 
  geom_line(df1.omit, aes(x=Time1, y=pH1, colour="Variable 1") + 
  geom_line(df2.omit, aes(x=Time2, y=pH2, colour="Variable 2") +
  geom_line(df3.omit, aes(x=Time3, y=pH3, colour="Variable 3") +
  geom_line(df4.omit, aes(x=Time4, y=pH4, colour="Variable 4")

【问题讨论】:

  • 您好,欢迎来到 stackoverflow。如果在 geom 级别使用na.omit(df*) 是否不起作用?如果没有,您能否提供一些虚拟数据供我们试用您的代码?
  • 谢谢。请参阅我的编辑以获取解决方案。我尝试在 geom 级别使用 na.omit,但它似乎不起作用,但我不确定我的语法是否正确。
  • 随时发布它作为您自己问题的答案。这样,搜索类似问题的人就可以看到这个问题有答案。

标签: r dataframe ggplot2 na geom


【解决方案1】:

所以,在玩了 30 分钟后,我意识到我可以首先在每个数据帧上分别使用 no.omit 函数,命名这些新对象,然后将它们绘制在 ggplot 上。这工作正常。另外,如果我想要一个合适的图例,上面的代码还是不正确的。

df1.omit <- na.omit(df1)
df2.omit <- na.omit(df2)
df3.omit <- na.omit(df3)
df4.omit <- na.omit(df4)

ggplot() + 
  geom_line(df1.omit, aes(x=Time1, y=pH1, colour="Variable 1") + 
  geom_line(df2.omit, aes(x=Time2, y=pH2, colour="Variable 2") +
  geom_line(df3.omit, aes(x=Time3, y=pH3, colour="Variable 3") +
  geom_line(df4.omit, aes(x=Time4, y=pH4, colour="Variable 4")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 2014-06-18
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多