R/Shiny 中的 Plain Dygraphs JavaScript 选项
Plain Dygraphs JavaScript options in R/Shiny
有没有办法在 R 中使用纯 Dygraphs JavaScript 选项(更具体地说是 Shiny)?
http://dygraphs.com/options.html
我认为 htmlwidgets 包中的 JS()
函数可以使用,但我不确定。
例如,我想使用 highlightSeriesOpts
(参见第一个 link)突出显示 dygraphs 图中的各个系列,以便仅显示图例中的选定系列(而不是所有系列)默认同时系列)。以下 link 下方的 2 个图准确地显示了要实现的目标:
http://dygraphs.com/gallery/#g/highlighted-series
A CSS 解决方案已经给出(即 .dygraph-legend {display: none;}
和 .dygraph-legend .highlight {display: inline;}
),但不知何故在 R/Shiny.
中不起作用
总之,这是我的概念脚本。它不起作用,但非常感谢所有建议。
ui <- fluidPage(
sidebarLayout(
sidebarPanel(),
mainPanel(dygraphOutput("plot"))
)
)
server <- function(input, output) {
set.seed(123)
data <- matrix(rnorm(12), ncol = 2)
data <- ts(data)
# Workaround for what might be a bug
# Reference:
data <- cbind(as.xts(data[,1]), as.xts(data[,2]))
colnames(data) <- c("Series 1", "Series 2")
#print(data) # Uncomment to view data frame
# The logic of the following is that plain Dygraphs JavaScript
# code can be used as plotting material
output$plot <- JS("
new Dygraph(plot,
data,
{ highlightSeriesOpts: {strokeWidth: 3} });
g.updateOptions({ highlightSeriesOpts: {strokeWidth: 3} });
")
}
shinyApp(ui = ui, server = server)
highlightSeriesOpts
使突出显示的系列笔画更粗并且不影响图例。您仍然需要适当的 CSS
才能仅显示图例中最接近的系列。要按照您的建议设置 highlightSeriesOpts
,http://rstudio.github.io/dygraphs/gallery-series-highlighting.html.
中有一个清晰的示例
lungDeaths <- cbind(ldeaths, mdeaths, fdeaths)
dygraph(lungDeaths, main = "Deaths from Lung Disease (UK)") %>%
dyHighlight(highlightSeriesOpts = list(strokeWidth = 3))
要在 Shiny 中获得更完整的答案,我们可以这样做。
library(shiny)
library(dygraphs)
lungDeaths <- cbind(ldeaths, mdeaths, fdeaths)
ui <- dygraph(lungDeaths, main = "Deaths from Lung Disease (UK)") %>%
dyHighlight(highlightSeriesOpts = list(strokeWidth = 3)) %>%
dyCSS(textConnection("
.dygraph-legend > span { display: none; }
.dygraph-legend > span.highlight { display: inline; }
"))
server <- function(input,output,session){
}
shinyApp(ui,server)
有没有办法在 R 中使用纯 Dygraphs JavaScript 选项(更具体地说是 Shiny)?
http://dygraphs.com/options.html
我认为 htmlwidgets 包中的 JS()
函数可以使用,但我不确定。
例如,我想使用 highlightSeriesOpts
(参见第一个 link)突出显示 dygraphs 图中的各个系列,以便仅显示图例中的选定系列(而不是所有系列)默认同时系列)。以下 link 下方的 2 个图准确地显示了要实现的目标:
http://dygraphs.com/gallery/#g/highlighted-series
A CSS 解决方案已经给出(即 .dygraph-legend {display: none;}
和 .dygraph-legend .highlight {display: inline;}
),但不知何故在 R/Shiny.
总之,这是我的概念脚本。它不起作用,但非常感谢所有建议。
ui <- fluidPage(
sidebarLayout(
sidebarPanel(),
mainPanel(dygraphOutput("plot"))
)
)
server <- function(input, output) {
set.seed(123)
data <- matrix(rnorm(12), ncol = 2)
data <- ts(data)
# Workaround for what might be a bug
# Reference:
data <- cbind(as.xts(data[,1]), as.xts(data[,2]))
colnames(data) <- c("Series 1", "Series 2")
#print(data) # Uncomment to view data frame
# The logic of the following is that plain Dygraphs JavaScript
# code can be used as plotting material
output$plot <- JS("
new Dygraph(plot,
data,
{ highlightSeriesOpts: {strokeWidth: 3} });
g.updateOptions({ highlightSeriesOpts: {strokeWidth: 3} });
")
}
shinyApp(ui = ui, server = server)
highlightSeriesOpts
使突出显示的系列笔画更粗并且不影响图例。您仍然需要适当的 CSS
才能仅显示图例中最接近的系列。要按照您的建议设置 highlightSeriesOpts
,http://rstudio.github.io/dygraphs/gallery-series-highlighting.html.
lungDeaths <- cbind(ldeaths, mdeaths, fdeaths)
dygraph(lungDeaths, main = "Deaths from Lung Disease (UK)") %>%
dyHighlight(highlightSeriesOpts = list(strokeWidth = 3))
要在 Shiny 中获得更完整的答案,我们可以这样做。
library(shiny)
library(dygraphs)
lungDeaths <- cbind(ldeaths, mdeaths, fdeaths)
ui <- dygraph(lungDeaths, main = "Deaths from Lung Disease (UK)") %>%
dyHighlight(highlightSeriesOpts = list(strokeWidth = 3)) %>%
dyCSS(textConnection("
.dygraph-legend > span { display: none; }
.dygraph-legend > span.highlight { display: inline; }
"))
server <- function(input,output,session){
}
shinyApp(ui,server)