闪亮的情节点击事件 - 仅更新 Table

Shiny Plot Click Event - Updating Table Only

我希望这里有人能帮助我,因为我在搜索中找不到答案。

目前,我有一个闪亮的应用程序,它只显示来自 Stock Returns 上的投资组合数据集的条形图。

使用此代码创建:

portfolio = c(100,100,100,100)
my_portfolio <- data.table(EuStockMarkets)
my_portfolio$Date <- seq(as.Date('2011-01-01'),as.Date('2016-02-04'),by = 1)

my_portfolio$R_DAX <- NA
my_portfolio$R_SMI <- NA
my_portfolio$R_CAC <- NA
my_portfolio$R_FTSE <- NA
my_portfolio$Total_Return <- NA

for (i in 2:1860) {
  my_portfolio$R_DAX[i] <- portfolio[1]*(my_portfolio$DAX[i]-my_portfolio$DAX[i-1])
  my_portfolio$R_SMI[i] <- portfolio[2]*(my_portfolio$SMI[i]-my_portfolio$SMI[i-1])
  my_portfolio$R_CAC[i] <- portfolio[3]*(my_portfolio$CAC[i]-my_portfolio$CAC[i-1])
  my_portfolio$R_FTSE[i] <- portfolio[4]*(my_portfolio$FTSE[i]-my_portfolio$FTSE[i-1])
}

my_portfolio$Total_Return <- my_portfolio$R_DAX + my_portfolio$R_SMI + my_portfolio$R_CAC + my_portfolio$R_FTSE
plot_subset <- my_portfolio[2:100]

现在,我正在寻找的 SEEMS 对我来说很简单,但经过大量研究后,我得到的高级解决方案并不真正适合我的问题。

我想要这个: 当我单击图上的条形图时(例如 return 最低的条形图),我希望在显示投资组合中股票的日期和股票价格的一侧显示 table。

我查看了以下这些资源,它们为我提供了关于点击的很好的起点,但与 table 更新相比却不是很多:

https://plot.ly/r/shiny-coupled-events/

https://plot.ly/r/shiny-coupled-hover-events/#new-to-plotly

Retrieving source data information from a barplot in R shiny interactively

(最后一个 link 最有帮助,它给了我点击的 x 和 y 坐标,但我最大的问题是:如何从那里跳到 table价值观?)

如果 plotly 不是这里最好的方法,还有什么替代方法?

感谢您阅读并帮助解决我的问题。非常感谢任何帮助!!

下面是我将如何解决这个问题:

我去掉了那个繁琐的for循环,你应该更深入地挖掘精彩library(data.table)

library(data.table)
library(plotly)
library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(plotlyOutput("myPlot"),
                dataTableOutput("myTable"))
)

server <- function(input, output) {

  portfolio = c(100, 100, 100, 100)

  my_portfolio <- data.table(EuStockMarkets)
  my_portfolio[, Date := seq(as.Date('2011-01-01'), as.Date('2016-02-03'), by = 1)]
  my_portfolio[, R_DAX := portfolio[1] * c(NA, diff(DAX))]
  my_portfolio[, R_SMI := portfolio[2] * c(NA, diff(SMI))]
  my_portfolio[, R_CAC := portfolio[3] * c(NA, diff(CAC))]
  my_portfolio[, R_FTSE := portfolio[4] * c(NA, diff(FTSE))]
  my_portfolio[, Total_Return := R_DAX + R_SMI + R_CAC + R_FTSE]

  plot_subset <- my_portfolio[2:100]

  output$myPlot <- renderPlotly({
    plot_ly(
      plot_subset,
      source = "myClickSource",
      x =  ~ Date,
      y =  ~ Total_Return,
      type = "bar"
    )
  })

  SelectedBar <- reactiveVal(NULL)

  observe({
    myClicks <- event_data("plotly_click", source = "myClickSource")
    req(myClicks)
    print(myClicks)
    SelectedBar(as.Date(myClicks$x))
    })

  output$myTable <- renderDataTable({
      plot_subset[Date %in% SelectedBar()]
    })

}

shinyApp(ui, server)