在ggplot2中为点添加带点的线

Cur*_*arn 5 r function ggplot2

为了方便起见,我想编写一个函数,为已有的绘图添加线图和散点图.我定义了:

addlinetoplot <- function(dataset, varx, vary)
     { 
       p <- geom_line(data=dataset, aes_string(x=varx, y=vary)) + 
            geom_point(data=dataset, aes_string(x=varx, y=vary))

       p
     }
Run Code Online (Sandbox Code Playgroud)

上述功能不起作用.如果我删除+标志和geom_point()部分它是有效的.以上不起作用,因为由于某种原因,人们不能添加这两个geoms.以下示例说明了该问题.

然后,我试过:

df1 <- data.frame(c1 = c(1:10), c2 = c(1:10))
c1 <- c(1:10)
csq <- c1^2
df2 <- data.frame(c1 = c(1:10), csq)
pltbase <- ggplot() + geom_line(df1, aes(x="c1", y="c2")) 

# This does not work.
pltbase + addlinetoplot(dataset=df2, varx = "c1", vary = "csq")
Run Code Online (Sandbox Code Playgroud)

我认为问题在于声明:

addthistotheplot <- geom_line(data=df2, aes_string(x="c1", y="csq")) + 
                    geom_point(data=df2, aes_string(x="c1", y="csq"))
Run Code Online (Sandbox Code Playgroud)

尝试定义上面的语句会引发错误:二元运算符的非数字参数.

如何定义addlinetoplot()函数以便我可以:

pltbase + addlinetoplot(dataset=df2, varx = "c1", vary = "csq")
Run Code Online (Sandbox Code Playgroud)

工作.一种方法是分离出geom_line和geom_point,并为每个都有不同的函数定义.有没有办法在同一个功能中执行此操作?

谢谢!

Cha*_*ase 11

我现在找不到引用,但是在某个地方有一个答案可以解释你可以通过将新参数作为列表传递来添加到ggplot图中.因此,您的功能变为:

addlinetoplot <- function(dataset, varx, vary) { 
  list(
    geom_line(data=dataset, aes_string(x=varx, y=vary)), 
    geom_point(data=dataset, aes_string(x=varx, y=vary))
  )
}
Run Code Online (Sandbox Code Playgroud)

然后你的绘图代码如下:

pltbase <- ggplot() + geom_line(data = df1, aes(x=c1, y=c2))
pltbase + addlinetoplot(df2, varx = "c1", vary = "csq")
Run Code Online (Sandbox Code Playgroud)

结果是:

在此输入图像描述