aes_string() 内的比例值
Scale value inside of aes_string()
我想在 ggplot 中通过将它乘以一个数字(比如 10)来缩放我的 y-var。问题是这是在闪亮的应用程序中,变量必须作为字符串传递,即 input$variable
.
我怎样才能像在 aes()
中那样乘以 aes_string()
中的一个变量?这是失败时的示例:
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))
Error in "mpg" * 10 : non-numeric argument to binary operator
我更喜欢使用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:您不需要在第二个 aes
中调用 wt
,因为它与第一个 aes
中的 "variable" 相同。
您可以使用 tidyeval
ggplot2 v3.0.0
中介绍的方法
# 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。
我想在 ggplot 中通过将它乘以一个数字(比如 10)来缩放我的 y-var。问题是这是在闪亮的应用程序中,变量必须作为字符串传递,即 input$variable
.
我怎样才能像在 aes()
中那样乘以 aes_string()
中的一个变量?这是失败时的示例:
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))
Error in "mpg" * 10 : non-numeric argument to binary operator
我更喜欢使用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:您不需要在第二个 aes
中调用 wt
,因为它与第一个 aes
中的 "variable" 相同。
您可以使用 tidyeval
ggplot2 v3.0.0
# 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。