我希望通过在ggplot中将数字乘以数字(例如10)来扩展我的y-var。问题是这是在一个Shiny应用程序中,变量必须作为字符串传递,即input$variable
。
如何将aes_string()
中的一个变量与aes()
中的变量相同?这是一个失败的例子:
library(ggplot2)
ggplot(data = subset(mtcars, cyl == 4), aes_string(x = "wt", y = "mpg")) +
geom_line(size = 1.5, color = "#00868B") +
geom_line(data = subset(mtcars, cyl == 8), aes_string(x = "wt", y = "mpg" * 10))
错误" mpg" * 10:二元运算符的非数字参数
答案 0 :(得分:2)
我更喜欢使用get
代替aes_string
来调用ggplot2
中的变量,并且可以使用值修改,例如:
library(ggplot2)
X <- "wt"
Y <- "mpg"
ggplot(subset(mtcars, cyl == 4), aes(get(X), get(Y))) +
geom_line() +
geom_line(data = subset(mtcars, cyl == 8), aes(y = get(Y) * 10)) +
labs(x = X,
y = Y)
PS:您不需要在第二个wt
中拨打aes
,因为它是相同的&#34;变量&#34;与第一个aes
一样。
答案 1 :(得分:2)
您可以使用ggplot2 v3.0.0
tidyeval
方法
# install.packages("ggplot2", dependencies = TRUE)
library(ggplot2)
var1 <- "wt"
var2 <- "mpg"
multiplier <- 10
ggplot(data = subset(mtcars, cyl == 4),
aes(x = !! rlang::sym(var1), y = !! rlang::sym(var2))) +
geom_line(size = 1.5, color = "#00868B") +
geom_line(data = subset(mtcars, cyl == 8),
aes(x = !! rlang::sym(var1), y = !! rlang::sym(var2) * multiplier))
或者将所有内容都放在一个函数中
plot_select_vars <- function(var1, var2, multiplier) {
var1 <- rlang::sym(var1)
var2 <- rlang::sym(var2)
ggplot(data = subset(mtcars, cyl == 4),
aes(x = !! var1, y = !! var2)) +
geom_line(size = 1.5, color = "#00868B") +
geom_line(data = subset(mtcars, cyl == 8),
aes(x = !! var1, y = !! var2 * multiplier))
}
plot_select_vars(var1, var2, multiplier)
由reprex package(v0.2.0)创建于2018-06-06。