使用geom_line连接缺失值

stu*_*est 23 r ggplot2

我想弄清楚是否可以使用geom_line连接缺失值.例如,在下面的链接中,在方面F的时间3处存在缺失值.在这种情况下,我想要一条连接时间2和4的线.有没有办法实现这个目标?

https://farm8.staticflickr.com/7061/6964089563_b150e0c2a6.jpg

我有一个累积值的数据框,如下所示:

head(cumulative)

  individual series Time     Value
1          A      x    1 -1.008821
2          A      x    2 -2.273712
3          A      x    3 -3.430610
4          A      x    4 -4.618860
5          A      x    5 -4.893075
6          A      x    6 -5.836532
Run Code Online (Sandbox Code Playgroud)

我正在密谋:

ggplot(cumulative, aes(x=Time,y=Value, shape=series)) + 
    geom_point() + 
    geom_line(aes(linetype=series)) + 
    facet_wrap(~ individual, ncol=3)
Run Code Online (Sandbox Code Playgroud)

Bri*_*ggs 45

里奇的答案非常彻底,但我想展示更简单的东西.由于线未绘制NA到点,因此在绘制线时,另一种方法是删除这些点.这隐含地在点之间进行线性插值(如直线那样).

使用dfrRichie的答案,无需计算z步骤:

ggplot(dfr, aes(x,y)) + 
  geom_point() +
  geom_line(data=dfr[!is.na(dfr$y),])
Run Code Online (Sandbox Code Playgroud)

就此而言,在这种情况下,可以针对整个事情进行子集化.

ggplot(dfr[!is.na(dfr$y),], aes(x,y)) + 
  geom_point() +
  geom_line()
Run Code Online (Sandbox Code Playgroud)


Ric*_*ton 11

如果值为,则不绘制线条NA.您需要通过插入缺失点来替换它们.有许多不同的插值算法,你需要试验几个,看看哪一个最适合你的数据.此示例interp1pracma包中使用线性插值via .

样本数据:

dfr <- data.frame(
  x = 1:10,
  y = runif(10)
)
dfr[c(3, 6, 7), "y"] <- NA
Run Code Online (Sandbox Code Playgroud)

插值步骤:

dfr$z <- with(dfr, interp1(x, y, x, "linear"))
Run Code Online (Sandbox Code Playgroud)

比较情节:

ggplot(dfr, aes(x, y)) + geom_line()
ggplot(dfr, aes(x, z)) + geom_line()
Run Code Online (Sandbox Code Playgroud)

如果要向其他人显示此图形,请确保通过插值(可能使用虚线)清楚地标记合成数据的位置.


根据评论更新:
您可以为不同的geom指定不同的美学.

ggplot(dfr, aes(x)) + 
  geom_point(aes(y = y)) +
  geom_line(aes(y = z))
Run Code Online (Sandbox Code Playgroud)

要为缺失/不缺少的y合并不同的线型,你可以做类似的事情

ggplot(dfr, aes(x)) + 
  geom_point(aes(y = y)) +
  geom_line(aes(y = y)) +
  geom_line(aes(y = z), linetype = "dotted")
Run Code Online (Sandbox Code Playgroud)