2017-06-16 239 views
0

(发布此前面忘了包括重复的例子。)R:不能绘制数据帧为NAS

我合并2个dataframes与左连接,使一个相当的大数据帧。我现在试图使用ggplot2来绘制数据框中的两列,但其中一个似乎没有正确绘制图形。它在x = 400处结束,尽管它有大量y值超过400的x值。

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

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值,但也有很多“真实”值。也许新加坡队以某种方式抛弃它?这是图表(可能与您的数据不完全相同)。正如你所看到的,Global_horizo​​n_irradiance结束于400: enter image description here

这里是我的代码:

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

甲线是分段的连续,每个段由两个连续的非NA值定义的,并且一个NA限定了断裂:可以如下得到连续情节手动删除与NA的行。您在400之后没有两个非NA连续值。 –

+0

@StéphaneLaurent是正确的。我没有意识到,如果没有连续2个非NA值,这些线条就会完全停止 - 我认为它会跳过该特定值,然后再恢复。谢谢! Stéphane,如果你发表你的评论作为答案,我会接受它。 – ale19

回答

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 

1

正如@StéphaneLaurent评论,geom_line定义与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")