R:如何添加geom_line以连接geom_point-现有ggplot的点

时间:2019-05-21 13:26:59

标签: r ggplot2

让我们以以下data.frame为例:

data <- data.frame(windowSize1=rep(c("1 week","2 weeks"),each=6),
                   windowSize2 = rep(c("0 weeks","1 week"),6),
                   Modell = rep(c("SVM","random Forest","NN"), 4),
                   MSE=c(rnorm(12))
                   )

ggplot()+
  geom_point(data=data, aes(x=windowSize1, y=MSE, color=Modell, shape=windowSize2),size=2)

我想在此图中添加一条线,该线连接数据中第1行的MSE值和第7行的MSE值,颜色与重新关联的SVM-数据点相同。 但是当我尝试:

  ggplot()+
  geom_point(data=data, aes(x=windowSize1, y=MSE, color=Modell, shape=windowSize2),size=2)+
  geom_line(data=data[c(1,7),],aes(x=windowSize1, y=MSE, color=Modell) )

我得到了错误方法:“ geom_path:每个组仅包含一个观察值。您是否需要调整组的美感?”

有人知道这个消息吗? (我不明白,因为data.frame的两行都来自“ SVM”组)

1 个答案:

答案 0 :(得分:1)

我认为问题在于windowSize1是一个因素,因此ggplot不知道如何在值之间划界线。如果将windowSize1更改为整数,则可以使用:

library(ggplot2)
data <- data.frame(windowSize1=rep(c(1,2),each=6),
                   windowSize2 = rep(c("0 weeks","1 week"),6),
                   Modell = rep(c("SVM","random Forest","NN"), 4),
                   MSE=c(rnorm(12))
)

ggplot()+
  geom_point(data=data, aes(x=windowSize1, y=MSE, color=Modell, shape=windowSize2),size=2)+
geom_line(data=data[c(1,7),],aes(x=windowSize1, y=MSE, color=Modell) )

enter image description here

编辑: 但是实际上有一个更好的解决方案,可以保留所有因素。诀窍是让ggplot了解应该在哪一点之间画线。您可以使用group参数来做到这一点。在这种情况下,Modells建立了组,所以:

data <- data.frame(windowSize1=rep(c("0 weeks","1 week"),each=6),
                   windowSize2 = rep(c("0 weeks","1 week"),6),
                   Modell = rep(c("SVM","random Forest","NN"), 4),
                   MSE=c(rnorm(12)))
ggplot()+
  geom_point(data=data, aes(x=windowSize1, y=MSE, color=Modell, shape=windowSize2,size=2))+
  geom_line(data=data[c(1,7),],aes(x=windowSize1, y=MSE, color=Modell, group=Modell,size=1) )

enter image description here