Событие клика по блестящему графику - только обновление таблицы - PullRequest
0 голосов
/ 29 ноября 2018

Я надеялся, что кто-то здесь может помочь мне, так как я не мог найти ответ нигде в моих поисках.

В настоящее время у меня есть блестящее приложение, которое просто отображает эту гистограмму из набора данных о доходности акций для портфеля.

Создано с использованием этого кода:

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

Извлечение информации о исходных данных из таблицы в R блестящий в интерактивном режиме

(Эта последняя ссылка является наиболее полезной и дает мне координаты x и yклика, но мой самый большой вопрос: как мне перейти от этого к табличным значениям?)

Если заговор не является лучшим методом здесь, что является альтернативой?

СпасибоВы за чтение и помогаете с моей проблемой.Любая помощь очень ценится!

1 Ответ

0 голосов
/ 29 ноября 2018

Вот как я мог бы решить эту проблему:

Я удалил этот громоздкий цикл 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)
...