通过调用另一个函数绘制ggplot

时间:2015-06-10 22:53:15

标签: r ggplot2

我有一个函数,它获取一个包含4列的矩阵作为输入。 此函数使用两列输入矩阵绘制箱线图,使用基于第三列的不同颜色填充它们,并且还基于第四列绘制每个框上的点以显示一些参数。

modify(root,0);

最后在函数结束时,我使用p1 <- ggplot(pl1, aes(x=factor(Edge_n), y=get(make.names(y_label)), ymax=max(get(make.names(y_label)))*1.05))+ geom_boxplot(aes(fill=method), outlier.shape= NA)+ theme(text = element_text(size=20), aspect.ratio=1)+ xlab("Number of edges")+ ylab(y_label)+ scale_fill_manual(values=color_box)+ geom_point(aes(x=factor(Edge_n), y=get(make.names(true_des)), ymax=max(get(make.names(true_des)))*1.05, color=method), position = position_dodge(width=0.75))+ scale_color_manual(values=color_pnt) 函数在打开的pdf上打印它。

当我将此函数行运行到行时,它运行良好,但是当我从另一个函数调用此函数时,它不起作用,我得到以下错误:

print()

实际上我要解决这个问题大约需要5个小时,但我不能。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

您的示例不是很明确,因为您拨打了电话,但是您没有显示变量的值,因此很难弄清楚您尝试做什么(例如,method是数据框pl1中列的名称,还是变量(如果它是变量,它的类型是什么?字符串?名称?))。

尽管如此,这里有一个例子可以帮助您实现目标:

尝试这样的事情:

pl1 <- data.frame(Edge_n = sample(5, 20, TRUE), foo = rnorm(20), bar = rnorm(20))

y_label <- 'foo'

ax <- do.call(aes, list(
    x=quote(factor(Edge_n)), 
    y=as.name(y_label), 
    ymax = substitute(max(y)*1.05, list(y=as.name(y_label)))))

p1 <- ggplot(pl1) + geom_boxplot(ax)
print(p1)

这应该让你开始弄清楚你正在尝试做的其余事情。

或者(对您的问题的不同解释)是您可能遇到aes评估其参数的环境问题。有关详细信息,请参阅https://github.com/hadley/ggplot2/issues/743。如果这是问题,那么答案可能会覆盖environment aes参数的默认值,例如:aes(x=factor(Edge_n), y=get(make.names(y_label)), ymax=max(get(make.names(y_label)))*1.05, environment=environment())