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

标签 r 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 参数?

最佳答案

最终想出办法解决这个问题,并希望这个小小的后续行动能够揭开这些类型任务的一些神秘面纱。尽管这个问题侧重于绘图,但重要的是首先要了解各种 R 包(例如 dplyr 和 plotly)中的函数如何计算表达式以及如何操纵这些表达式的计算方式。建立这种理解的一个很好的引用是 Hadley 的关于在 dplyr herehere 中编程的文章。
一旦掌握了这一点,事情就会变得非常简单。诀窍是像调用 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)

关于r - 将变量作为参数传递给 plot_ly 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47760169/

相关文章:

r - 在 R 中按组计算对数?

python - Plot.ly散点图,自动转换

python - 将一条线上的时间线组合成子图

更新源数据时,plotly blazor 曲面图不会刷新

python - Plotly-Dash:如何制作带有交叉表的数据框,仍显示原始列名称?

R用XLSX包编写excel文件需要很长时间和错误

r - 如何在其他脚本中包含(源)R 脚本

r - 如何在大型稀疏矩阵中组合具有相同名称的列

r - 如何在给定时间段内抓取所有 subreddit 帖子

python - 如何更改子图大小并减少子图之间的空间?