将变量作为参数传递给plot_ly函数

7

我希望创建一个函数,根据传入的参数创建不同类型的 plotly 图表。如果我创建以下数据

library(plotly)
#### test data
lead <- rep("Fred Smith", 30)
lead <- append(lead, rep("Terry Jones", 30))
lead <- append(lead, rep("Henry Sarduci", 30))
proj_date <- seq(as.Date('2017-11-01'), as.Date('2017-11-30'), by = 'day')
proj_date <- append(proj_date, rep(proj_date, 2))
set.seed(1237)
actHrs <- runif(90, 1, 100)
cummActHrs <- cumsum(actHrs)
forHrs <- runif(90, 1, 100)
cummForHrs <- cumsum(forHrs)
df <- data.frame(Lead = lead, date_seq = proj_date,
                 cActHrs = cummActHrs,
                 cForHrs = cummForHrs)

我可以使用以下代码绘制它:

plot_ly(data = df, x = ~date_seq, y = ~cActHrs, split = ~Lead)

如果我创建了一个像下面所示的makePlot函数,我该如何让它做出这样的事情:
makePlot <- function(plot_data = df, x_var = date_seq, y_var, split_var) {
    plot <- plot_ly(data = df, x = ~x_var, y = ~y_var, split = ~split_var)

    return(plot)
}

?

有没有一个函数,可以将x_var、y_var和split_var包装起来,使plotly将它们识别为x、y和split参数?
1个回答

10
最终我弄明白了,希望这个小的跟进能够解开这些任务的一些神秘面纱。虽然这个问题侧重于绘图,但首先建立对各种R包(例如dplyr和plotly)中函数如何评估表达式以及如何操作这些表达式的理解非常重要。建立这种理解的一个很好的参考是Hadley关于在dplyr中编程的文章here或者here
一旦掌握了这些,这就变得非常容易。诀窍是简单地像调用dplyr函数时传递您的变量参数,并确保在绘图函数内引用这些参数。对于上面的问题,这个函数对我有用:
makePlot <- function(plot_data = df, x_var, y_var, split_var,
                     type_var="scatter",
                     mode_var="lines+markers") {
    quo_x <- enquo(x_var)
    quo_y <- enquo(y_var)
    quo_split <- enquo(split_var)
    
    # print(c(quo_x, quo_y, quo_split))
    
    plot <- plot_ly(data = plot_data, x = quo_x, y = quo_y, split = quo_split,
                    type=type_var, mode=mode_var)

    return(plot)
}

# using df created in question, pass col's as args like dplyr functions
p1 <- makePlot2(df, date_seq, cActHrs, Lead)
p2 <- makePlot2(df, date_seq, cForHrs, Lead)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接