2017-02-16 51 views
0

我想在我的闪亮的应用创建一个rBokeh情节作为输出与在UI rbokehOutput('plot')rBokeh动态地块面积

output$plot <- renderRbokeh({ 
figure() %>% 
     ly_hexbin(x,y) 
    }) 

在服务器中的一部分。我希望剧情的大小是动态的,因为它应该动态调整大小以填充整个剧情窗口。我一直在玩弄heightwidth的论点,无论是在ui和服务器部分,但都无法使其工作;我也尝试在服务器部分使用sizing_mode = "stretch_both"。当我在没有Shiny的RStudio中显示绘图时,绘图不会填充整个绘图窗口,它会保持其正方形和高宽比。我希望它表现得像一个正常的R图,即当我放大绘图窗口时,绘图会自动调整大小以填充整个窗口。我发现this link,但它只涉及Python的实现。理想情况下,我希望将Shiny中的高度固定为500px,并根据浏览器的大小动态改变宽度。

最小工作示例:

library(shiny) 
library(rbokeh) 

ui <- fluidPage(
    titlePanel("Hello Shiny!"), 
    sidebarLayout(
    sidebarPanel(
     sliderInput('numpoint', 'Number of points to plot', min = 10, max = 1000, value = 200) 
    ), 
    mainPanel(
     rbokehOutput('plot', width = "98%", height = "500px") 
    ) 
) 
) 

server <- function(input, output) { 
    output$plot <- renderRbokeh({ 
    x <- seq(1, 100, length = input$numpoint) 
    y <- rnorm(input$numpoint, sd = 5) 

    figure() %>% 
     ly_hexbin(x,y) 
    }) 
} 

shinyApp(ui, server) 

更新MWE:

library(shiny) 
library(rbokeh) 

ui <- fluidPage(
    titlePanel("Hello Shiny!"), 
    sidebarLayout(
    sidebarPanel(
     sliderInput('numpoint', 'Number of points to plot', min = 10, max = 1000, value = 200) 
    ), 
    mainPanel(
     fluidRow(
     column(12, 
       rbokehOutput('plot', height = "800px") 
       ) 
     ), 
     fluidRow(
     column(12, 
       plotOutput('plot1', height = "800px") 
       ) 
    ) 

    ) 
) 
) 

server <- function(input, output) { 
    output$plot <- renderRbokeh({ 
    x <- seq(1, 100, length = input$numpoint) 
    y <- rnorm(input$numpoint, sd = 5) 

    figure(width = 1800, height = 800) %>% 
     ly_hexbin(x,y) 
    }) 

    output$plot1 <- renderPlot({ 
    x <- seq(1, 100, length = input$numpoint) 
    y <- rnorm(input$numpoint, sd = 5) 

    plot(x,y) 
    }) 
} 

shinyApp(ui, server) 

回答

0

更新我的答案..

我已经添加了宽度和高度为我的调用图()和阴谋现在响应地调整大小。

library(shiny) 
library(rbokeh) 

ui <- fluidPage(
    titlePanel("Hello Shiny!"), 
    sidebarLayout(
     sidebarPanel(
      sliderInput('numpoint', 'Number of points to plot', min = 10, max = 1000, value = 200) 
    ), 
    mainPanel(
     rbokehOutput('plot', width = "100%", height = "800px") 
     ) 
    ) 
) 

server <- function(input, output) { 
    output$plot <- renderRbokeh({ 
     x <- seq(1, 100, length = input$numpoint) 
     y <- rnorm(input$numpoint, sd = 5) 

     figure(width = 1800, height = 800) %>% 
      ly_hexbin(x,y) 
    }) 
} 

shinyApp(ui, server) 

这是你想要的吗?

+0

不是。查看我更新的MWE,并比较缩小窗口宽度(但可能保持高度)时两个图的大小。基本图形保持在800px高度,但rBokeh图形不是。而且,当你在调用'figure()'的时候指定'width = 800'时,图中的hexbins被拉伸(不像基本图形的动态调整大小的点)。 – Skumin