在 ggplot 函数注释中使用 quosure
Using quosure inside ggplot function annotate
我已经制作了下面的散点图函数。
scatter_fun<-function(data,xval,yval,xlabel,ylabel, labels){
xval <- enquo(xval)
yval <- enquo(yval)
ggplot(data, aes(!!xval, !!yval))+
geom_smooth(method=lm, se=FALSE)+
geom_point()+
theme(axis.line.x.bottom = element_line("black"),
axis.line.y.left = element_line("black"),
axis.text.x = element_blank(),
legend.title = element_blank())+ylab(ylabel)+
xlab(xlabel)+
scale_y_continuous(labels = scales::comma)+
expand_limits(y = 0)+
geom_smooth(method="lm", se=FALSE, colour="red")+
annotate("text",
x=max(!!xval)/2,
y =0,
label = labels)
}
但是我无法使等式的注释部分起作用。如果我调用该函数,我会收到错误消息:
错误:Quosures 只能在 quasiquotation 上下文中取消引用。
差:
列表(!!myquosure)
好:
dplyr::mutate(数据, !!myquosure)
但是,当我删除代码的注释部分时,它工作得很好。我必须更改代码中的哪些内容才能使其正常工作?
如果您使用 ensym
捕获符号,则可以 eval
它们在 df
的上下文中:
scatter_fun<-function(data,xval,yval,xlabel,ylabel, labels){
xval <- ensym(xval)
yval <- ensym(yval)
ggplot(data, aes(!!xval, !!yval))+
geom_smooth(method=lm, se=FALSE)+
geom_point()+
theme(axis.line.x.bottom = element_line("black"),
axis.line.y.left = element_line("black"),
axis.text.x = element_blank(),
legend.title = element_blank())+ylab(ylabel)+
xlab(xlabel)+
scale_y_continuous(labels = scales::comma)+
expand_limits(y = 0)+
geom_smooth(method="lm", se=FALSE, colour="red")+
annotate("text",
x=max(eval(xval, data))/2,
y =0,
label = labels)
}
df <- data.frame(x = rnorm(100), y = rnorm(100))
scatter_fun(df, x, y, "x", "y", "my labels")
我已经制作了下面的散点图函数。
scatter_fun<-function(data,xval,yval,xlabel,ylabel, labels){
xval <- enquo(xval)
yval <- enquo(yval)
ggplot(data, aes(!!xval, !!yval))+
geom_smooth(method=lm, se=FALSE)+
geom_point()+
theme(axis.line.x.bottom = element_line("black"),
axis.line.y.left = element_line("black"),
axis.text.x = element_blank(),
legend.title = element_blank())+ylab(ylabel)+
xlab(xlabel)+
scale_y_continuous(labels = scales::comma)+
expand_limits(y = 0)+
geom_smooth(method="lm", se=FALSE, colour="red")+
annotate("text",
x=max(!!xval)/2,
y =0,
label = labels)
}
但是我无法使等式的注释部分起作用。如果我调用该函数,我会收到错误消息:
错误:Quosures 只能在 quasiquotation 上下文中取消引用。
差:
列表(!!myquosure)
好:
dplyr::mutate(数据, !!myquosure)
但是,当我删除代码的注释部分时,它工作得很好。我必须更改代码中的哪些内容才能使其正常工作?
如果您使用 ensym
捕获符号,则可以 eval
它们在 df
的上下文中:
scatter_fun<-function(data,xval,yval,xlabel,ylabel, labels){
xval <- ensym(xval)
yval <- ensym(yval)
ggplot(data, aes(!!xval, !!yval))+
geom_smooth(method=lm, se=FALSE)+
geom_point()+
theme(axis.line.x.bottom = element_line("black"),
axis.line.y.left = element_line("black"),
axis.text.x = element_blank(),
legend.title = element_blank())+ylab(ylabel)+
xlab(xlabel)+
scale_y_continuous(labels = scales::comma)+
expand_limits(y = 0)+
geom_smooth(method="lm", se=FALSE, colour="red")+
annotate("text",
x=max(eval(xval, data))/2,
y =0,
label = labels)
}
df <- data.frame(x = rnorm(100), y = rnorm(100))
scatter_fun(df, x, y, "x", "y", "my labels")