在 plotly r shiny 应用程序中动态添加跟踪

Posted

技术标签:

【中文标题】在 plotly r shiny 应用程序中动态添加跟踪【英文标题】:Adding trace dynamically in plotly r shiny app 【发布时间】:2020-02-26 05:20:37 【问题描述】:

我正在尝试使用 plotly 在 r shiny 应用程序中添加一个情节。我可以在手动添加痕迹时添加它。但现在我想动态添加痕迹。此外,我不想为所有列添加跟踪。我只想为以销售结尾的列添加跟踪。以下是到目前为止的代码。这不会添加所有痕迹。如何添加所有包含_sales 的痕迹。

output$pacingplot <- renderPlotly(

  colNames <- names(Delivery_data)[-1] #Assuming Date is the first column

  print(colNames)
  p <- plotly::plot_ly(x = ~Delivery_data$Date, type = "scatter",
                       mode = "lines")
  for(trace in colNames)
    p <- p %>% plotly::add_trace(y = as.formula(paste0("~`", trace, "`")), name = trace)
  

  p %>% 
    layout(title = "Impressions Over Time",
           xaxis = list(title = "Date"),
           yaxis = list (title = "Impressions"))


)

以下是列名(这不包括自从我删除第一列以来的日期):

[1] "apples_sales"           "apples_count"    "bananas_sales"          "bananas_count"   "oranges_sales"        "oranges_count" "peach_sales"          "peach_count"  

以下是数据

Delivery_data <- data.frame(
  Date = c("2019-08-19", "2019-08-20", "2019-08-21",
           "2019-08-22", "2019-08-23", "2019-08-24"),
  apples_sales = c(10882.05495, 516.29755, 949.4084, 3950.5318,
                2034.02055, 1770.50415),
  apples_count = c(239575, 11281, 20150, 88679, 45672, 38553),
  peach_sales = c(0, 0, 0, 0, 0, 0),
  peach_count = c(0, 0, 0, 0, 0, 0),
  bananas_sales = c(9643.600102, 6041.538067, 5371.758106, 5238.308826,
              4994.43054, 5001.303585),
  bananas_count = c(630827, 510219, 565440, 576678, 518081, 551733),
  oranges_sales = c(0, 1694.44, 9105.89, 6179.47, 7366.31, 6275.43),
  oranges_count = c(0, 684210, 3695182, 2501560, 2984563, 2531400)
)

【问题讨论】:

你应该发布一个工作示例。 刚刚修改了问题 擅长添加数据。你想输入代码来创建一个output 容器吗? (您还应该添加一个library(plotly) 行。 每个人的痛点都不一样。我不是普通的plotly-user,所以“创建一个函数作为列表叶”然后“使用它”的风格并不是特别自然。我需要一个完整的用例,即该列表项做什么output$pacingplot?当我将您的数据扔到一个空列表中时,我添加了一个“pacingplot”元素作为参数,我得到:Error in eval(expr, data, expr_env) : object 'apples_sales' not found 【参考方案1】:

像这样它似乎工作:

server <- function(input, output)
  output$pacingplot <- renderPlotly(

    colNames <- names(Delivery_data)[-1] #Assuming Date is the first column

    # subsetting on just _sales columns
    colNames <- colNames[grepl('_sales$', colNames)]
    print(colNames)

    # note that I added the data to the initial plot_ly call
    p <- plotly::plot_ly(data=Delivery_data, type = "scatter", mode = "lines")

    for(trace in colNames)
      p <- p %>% plotly::add_trace(x = ~as.Date(Date), # converted Date as date
                                   y = as.formula(paste0("~`", trace, "`")), name = trace)
    

    p %>% 
      layout(title = "Impressions Over Time",
             xaxis = list(title = "Date"),
             yaxis = list (title = "Impressions"))
  )

【讨论】:

以上是关于在 plotly r shiny 应用程序中动态添加跟踪的主要内容,如果未能解决你的问题,请参考以下文章

plotly::subplot 注释标题在 R Shiny 中消失

在 R Shiny 中调整 Plotly::subplot 的高度和宽度

R语言将ggplot2对象转化为plotly对象并通过shiny将可视化结果在应用程序或者网页中显示出来

R Shiny 为 Plotly 折线图选择轨迹?

使用reactiveValues()在Shiny中绘制动态C5.0决策树

R Shiny中的Plotly分组条形图