我想弄清楚是否可以使用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.您需要通过插入缺失点来替换它们.有许多不同的插值算法,你需要试验几个,看看哪一个最适合你的数据.此示例interp1在pracma包中使用线性插值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)