闪亮的情节点击事件 - 仅更新 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)
我希望这里有人能帮助我,因为我在搜索中找不到答案。
目前,我有一个闪亮的应用程序,它只显示来自 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)