在ggplot2中共享绘图和对象的函数

时间:2015-04-16 16:20:29

标签: r plot ggplot2

我的想法是创建一组函数(ggplot2),这些函数是某种层次结构的,用于创建和编辑绘图。因此,将有一个函数首先定义网格,另一个函数绘制数据,其他几个函数添加可选的数据/线/多边形。

这是一个小工作示例,应该澄清我的担忧:

# a first function that creates the grid and background and
# manipulates some data

plot.func <- function() {

  a <<- 1 
  b <<- c(1,2,3,4)
  z <<- 0:15

  gg <<- ggplot(data=data, aes(x=height, y=weight)) +
          geom_point()
  return(gg)
}

# functions that add something to the plot working with
# objects defined in another functions
add.vline <- function(height) {
  d <<- a+b 
  gg <<- gg + geom_vline(xintercept=height)
  return(gg)
}

add.hline <- function(weight) {
  e <<- z-d
  gg <<- gg + geom_hline(yintercept=weight)
  return(gg)
}

plot.func()

add.vline(60)

add.hline(154)

你看到我(必须?)与<<-合作很多,因为每个函数只能在他自己的(临时?)环境中运行。为了共享每个函数必须访问的对象,我使用<<-使这些对象可以全局使用。

我很确定,有一种正确(和更好)的方式。也许甚至可能我的方法完全错误但我没有找到另一种解决方案。

更新:以下是我希望如何使用style等参数来影响以下功能的示例:

plot.func <- function(style) {

  style <<- style

  gg <- ggplot(data=data, aes(x=height, y=weight)) +
          geom_point()
  return(gg)
}

add.vline <- function(style, height) {
  if (style == 0) {
     gg <- gg + geom_vline(xintercept=height, col=red)
  } else {
     gg <- gg + geom_vline(xintercept=height, col=red)
  }
  return(gg)
}

gg <- plot.func(0)
add.vline(gg, 65)

0 个答案:

没有答案