基本上,如何通过变量将参数传递给ggplot?例如,假设我希望将scale_arg = 'labels = comma,'
传递到scale_y_continuous
中,有时它采用该值,有时只是一个空字符串,这取决于我是否希望ggplot具有该arg。我如何准确地将以字符串形式存储在变量中的参数传递给ggplot?简单地scale_y_continuous(scale_arg)
行不通
以下示例:
library(ggplot2)
library(scales)
g <- ggplot(data3, aes(x = yrmo, y = weight, color = store)) +
geom_line(na.rm = TRUE) +
scale_x_date() +
scale_y_continuous(
limits = c(0, 10),
breaks = seq(0, 10, 1),
labels = comma,
expand = c(0, 0)
)
答案 0 :(得分:1)
您可以使用do.call
,它将列表的元素作为参数传递给函数。如果您使用label_arg <- list()
运行以下代码,则结果将是您期望的,而无需使用额外的labels
参数。您可能想出了一种将参数作为字符串传递的方法,但这将是非常非R的模式。
library(scales)
scale_args1 <-
list(
limits = c(0, 10)*1e4,
breaks = seq(0, 10, 1)*1e4,
expand = c(0, 0))
label_arg <- list(labels = comma)
scale_args <- unlist(list(scale_args1, label_arg), recursive = F)
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width*1e4,
color = Species)) +
geom_line(na.rm = TRUE) +
do.call(scale_y_continuous, scale_args)
任何阅读此书的人的注释:与unlist(list(list_1, list_2), recursive = F)
相比,在R中有更好的方法来组合列表吗?像cbind
,但有列表吗?
答案 1 :(得分:0)
您必须将参数保存在名为scale_arg
。 名称(在本例中为labels
)是要保留在变量中的参数的名称。
scale_arg = c(labels = 'Sepal Width Label Test')
g <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Species)) +
geom_line(na.rm = TRUE) +
scale_y_continuous(
limits = c(0, 10),
breaks = seq(0, 10, 1),
scale_arg,
expand = c(0, 0)
)
g