源ggplot代码并在ggbio :: tracks函数中使用

时间:2015-07-06 12:24:07

标签: r ggplot2

我需要使用ggbio::tracks function来对齐Xaxis合并的 ggplots

由于 ggplot 脚本很复杂,因此它们会保存为单独的文件,然后将其输出到绘图中。

这是一个复杂的ggplot 示例脚本文件,称之为 test.R ,然后将其来源:

# test.R
ggplot(cars,aes(speed,dist)) + geom_point(col="red")

现在,问题是:

library(ggbio)
library(ggplot2)

# complex ggplot script sourced text.R
x1 <- source("test.R")

# another complex ggplot script
x2 <- ggplot(cars,aes(speed,dist)) + geom_point(col="green")

# check classes
class(x1)
# [1] "list"
class(x2)
# [1] "gg"     "ggplot"

# this works
print(x1)

enter image description here

# this doesn't work within tracks function
tracks(
  print(x1),
  x2,
  heights=c(10,1)
)
  

错误:autoplot不支持类型列表的对象。请改用qplot()或ggplot()。

# below works - Note: x1$value
tracks(
  x1$value,
  x2,
  heights=c(10,1)
)

enter image description here

我肯定遗漏了一些非常简单的内容,我尝试使用 source()选项,但无法找到避免使用$valueprint()的方法。从本质上讲,我希望能够在代码下运行并获得合并的情节:

# ideal code
tracks(
  x1,
  x2,
  heights=c(10,1)
)

1 个答案:

答案 0 :(得分:2)

Ad-hoc解决方案:通过将test.R包装成虚拟函数来修改你的# test.R test_ggplot <- function() { ggplot(cars,aes(speed,dist)) + geom_point(col="red") }

source("test.R")
x1 <- test_ggplot()

然后

class(x1)
#[1] "gg"     "ggplot"

显然会导致

xx <- source()

老实说,我从未见过Value的用法,所以我怀疑建议这样做。 ?source ...

中甚至没有source部分

修改:withVisible调用for,它将返回值完全描述为列表:

  

此函数计算表达式,将其返回到两个元素中   包含其值的列表以及显示是否存在的标志   自动打印。