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

时间:2018-11-28 22:57:09

标签: r shiny tooltip plotly

我希望这里的人可以帮助我,因为我无法在搜索中的任何地方找到答案。

当前,我有一个闪亮的应用程序,它仅显示投资组合的股票收益率上的数据集中的条形图。

使用以下代码创建:

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]

Bar chart of return

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

我想要这样:    当我单击情节上的条形图(例如,收益最低的条形图)时,我希望在侧面显示表格,以显示投资组合中股票的日期和股价。

我查看了以下这些资源,这些资源为我提供了有关点击的很好的起点,但对于表格更新却没有太多帮助:

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

(最后一个链接是最有用的,它为我提供了点击的x和y坐标,但是我最大的问题是:如何从该值跳到表格值?)

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

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

1 个答案:

答案 0 :(得分:0)

这是我要解决的方法:

我删除了该繁琐的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)