我有一个函数,它获取一个包含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个小时,但我不能。 有人可以帮忙吗?
答案 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())