2017-02-16 21 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