使用多个数据帧绘制多条线时从 ggplot 中省略 NA 值
Omitting NA values from ggplot when using multiple dataframes to plot multiple lines
我的数据框有时包含 NA 值。这些以前是空白,如 'BAD' 之类的字符或来自导入的 .csv 文件的实际 'NA' 字符。我已将数据框中的所有内容更改为数字 - 这会将所有非数字字符更改为 NA。到目前为止,还不错。
我知道我可以使用以下数据框 'df' 来确保始终在数据点之间绘制一条线,确保没有间隙:
ggplot(na.omit(df), aes(x=Time, y=pH)) +
geom_line()
但是,有时我希望使用 ggplot2 绘制 2 个或更多数据帧以获得单个图。我这样做是因为我的 x 轴(时间)对于所有数据帧来说确实是相同的,但是具体的数字是不同的。我在合并这些数据帧时遇到了巨大的麻烦,因为行不相等。否则我会合并、融化数据并像往常一样使用 ggplot2 来制作多线图。
从那以后我了解到您可以在 'geom level':
处的 ggplot 上手动绘制多个数据帧
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")
所以,玩了 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")
我的数据框有时包含 NA 值。这些以前是空白,如 'BAD' 之类的字符或来自导入的 .csv 文件的实际 'NA' 字符。我已将数据框中的所有内容更改为数字 - 这会将所有非数字字符更改为 NA。到目前为止,还不错。
我知道我可以使用以下数据框 'df' 来确保始终在数据点之间绘制一条线,确保没有间隙:
ggplot(na.omit(df), aes(x=Time, y=pH)) +
geom_line()
但是,有时我希望使用 ggplot2 绘制 2 个或更多数据帧以获得单个图。我这样做是因为我的 x 轴(时间)对于所有数据帧来说确实是相同的,但是具体的数字是不同的。我在合并这些数据帧时遇到了巨大的麻烦,因为行不相等。否则我会合并、融化数据并像往常一样使用 ggplot2 来制作多线图。
从那以后我了解到您可以在 'geom level':
处的 ggplot 上手动绘制多个数据帧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")
所以,玩了 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")