我需要使用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)
# 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)
)
我肯定遗漏了一些非常简单的内容,我尝试使用 source()选项,但无法找到避免使用$value
或print()
的方法。从本质上讲,我希望能够在代码下运行并获得合并的情节:
# ideal code
tracks(
x1,
x2,
heights=c(10,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
,它将返回值完全描述为列表:
此函数计算表达式,将其返回到两个元素中 包含其值的列表以及显示是否存在的标志 自动打印。