我有两个可能相关或不相关的问题。 这是代码,演示了这两个问题 UI.r
library(shiny)
library(shinyBS)
shinyUI(fluidPage(
titlePanel("Basic example"),
fluidRow(
mainPanel(
# ggvisOutput("fiveMinPlot"),
uiOutput("plotUI"))
)))
server.r
library(shiny)
library(shinyBS)
tooltipMaker <- function(x){
if(is.null(x)) return(NULL)
row <- testData[testData$rowID == x$rowID,]
paste0(c('TradeID','time','PL'), ": ", format(row[,c('TradeID','time','PL')]), collapse = "<br />")
}
testData <- data.frame(cbind(time = rep(-4:10 * 500,3),
TradeID=c(rep("this",15),rep("that",15),rep("the other",15)),
PL=c(1:15,4:18,7:21),
theColor=c(rep("green",15),rep("lightblue",15),rep("red",15)),
theWidth=c(rep(1,30),rep(2,15)),
rowID=1:45))
as.numericDF <- function(dataframe)
{
if(class(dataframe)!="data.frame") dataframe <- data.frame(dataframe)
for(i in 1:length(dataframe)){
suppressWarnings({
if(!any(is.na(as.numeric(levels(dataframe[[i]])))))
dataframe[[i]] <- as.numeric(levels(dataframe[[i]])[as.numeric(dataframe[[i]])])
})
}
return(dataframe)
}
shinyServer(function(input, output) {
observe({
testData <- as.numericDF(testData)
ggvis(testData,x=~time,y=~PL, stroke := ~theColor,strokeWidth:=~theWidth,key := ~rowID) %>% layer_lines()%>%
add_tooltip(tooltipMaker,"hover") %>%
bind_shiny("theGraph")
})
output$plotUI <- renderUI({ #this best represents my actual code
return(ggvisOutput("theGraph"))
})
})
仔细观察时运行它,所有3条线渲染,然后2立即消失。在这种情况下,红色似乎总是保留,但在我的样本中随机设置它。
我使用chrome的内置检查器打开生成的HTML,发现看起来所有3行都被第一行替换。
http://imagizer.imageshack.us/a/img661/831/sRgYMY.jpg
然后我刷了很多次刷新。令我惊讶的是,它在大约20%的时间内正常工作。这是它工作时的样子
http://imagizer.imageshack.us/a/img540/3053/0CrwFP.jpg
有时它如何运作?!我以为计算机是确定性的......
将鼠标悬停在一条线上。
您会注意到悬停数据始终显示代表最左侧数据点的数据。 为什么呢?