Shiny中同步dygraph的第二个Y轴

时间:2015-10-26 15:59:53

标签: r shiny dygraphs

我有一个闪亮的应用程序,有两个同步的dygraphs。 上面一个有一个Y轴,另一个有两个Y轴。

问题是第二个Y轴占用div中的空间。 所以日期不再低于彼此。 我试图修改上面的dygraph的长度,但是如果屏幕的大小发生变化(因为应用程序是响应的),它就不起作用了。 我尝试使用dyCSS但没有结果。

有没有办法在上面的dygraph上没有添加第二个Y轴,以保持右边的合适空间? 或者删除底部图形的第二个Y轴的div?

感谢您的帮助。

问题图片:

enter image description here

以下是可重现的例子:

ui.R

library(dygraphs)

shinyUI(fluidPage(
    dygraphOutput("dygraph1"),
    dygraphOutput("dygraph2")
    )
)

server.R

library(dygraphs)
library(datasets)

shinyServer(function(input, output) {

    lungDeaths <- cbind(mdeaths, fdeaths)

    output$dygraph1 <- renderDygraph({
        dygraph(ldeaths, main = "Male", group = "lung-deaths")
    })

    output$dygraph2 <- renderDygraph({
        dygraph(lungDeaths, main = "All", group = "lung-deaths") %>%
            dySeries("fdeaths", axis = "y2")
    })
})

1 个答案:

答案 0 :(得分:0)

这不是最优雅的解决方案,但您可以使用jQuery隐藏第二个轴。

library(dygraphs)

ui <- shinyUI(fluidPage(
  tags$head(
    tags$script(
      HTML("
        Shiny.addCustomMessageHandler ('hideAxis',function (val) {
          hideAxis();
        });
        function hideAxis(){
          $('#dygraph1').find('.dygraph-axis-label-y2').hide();
        }
           ")
    )
  ),
  dygraphOutput("dygraph1"),
  dygraphOutput("dygraph2")
)
)

library(dygraphs)
library(datasets)

server <- shinyServer(function(input, output, session) {

  lungDeaths <- cbind(mdeaths, fdeaths)
  ldeaths2   <- cbind(ldeaths, ldeaths)
  colnames(ldeaths2) <- c("ldeaths","ldeaths2")


  output$dygraph1 <- renderDygraph({
    reactiveTimer(50,{session$sendCustomMessage (type="hideAxis", 1)})

    dygraph(ldeaths2, main = "Male", group = "lung-deaths") %>%
      dySeries("ldeaths2", axis = "y2") %>%
      dyCallbacks(zoomCallback = "function(){$('#dygraph1').find('.dygraph-axis-label-y2').hide();}") 
  })

  output$dygraph2 <- renderDygraph({
    dygraph(lungDeaths, main = "All", group = "lung-deaths") %>%
      dySeries("fdeaths", axis = "y2")
  })


})

shinyApp(ui=ui, server=server)

修改

因为danvk吮吸了'rightGap?选项可用于创建neatersolution,例如:

library(dygraphs)

ui <- shinyUI(fluidPage(
  dygraphOutput("dygraph1"),
  dygraphOutput("dygraph2")
)
)

library(dygraphs)
library(datasets)

server <- shinyServer(function(input, output, session) {

  lungDeaths <- cbind(mdeaths, fdeaths)

  output$dygraph1 <- renderDygraph({
    dygraph(ldeaths, main = "Male", group = "lung-deaths") %>%
      dyOptions(axisLabelWidth=80, rightGap = 90)
  })
  output$dygraph2 <- renderDygraph({
    dygraph(lungDeaths, main = "All", group = "lung-deaths") %>%
      dySeries("fdeaths", axis = "y2") %>%
      dyOptions(axisLabelWidth=80)
  })
})

shinyApp(ui=ui, server=server)

此处axislabelWidthrightGap选项设置为对齐图表。