2017-02-16 18 views
0

Я пытаюсь создать сюжет rBokeh как выход в моем Блестящем приложении с rbokehOutput('plot') в пользовательском интерфейсе иrBokeh размера динамичного сюжета

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

в серверной части. Я хотел бы, чтобы размер сюжета был динамичным, в том смысле, что он должен динамически изменять размер, чтобы заполнить все окно графика. Я играл с аргументами height и width, как в частях ui, так и на сервере, но не смог заставить их работать; Я также попытался использовать sizing_mode = "stretch_both" в серверной части. Когда я показываю график в RStudio без Shiny, сюжет также не заполняет все окно графика, он сохраняет свою квадратную форму и соотношение сторон. Я бы хотел, чтобы он вел себя как обычный график R, т. Е. Когда я увеличиваю окно графика, график автоматически изменяется, чтобы заполнить полное окно. Я нашел this link, но он касается только реализации Python. В идеале я хотел бы, чтобы высота в Shiny была зафиксирована на 500 пикселей и ширина динамически изменялась на основе (размера) браузера.

Минимальный рабочий пример:

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 и сравните, как изменяются размеры двух графиков, когда вы уменьшаете ширину окна (но, возможно, сохраняете высоту). Базовая графика поддерживается на постоянной высоте 800 пикселей, но графики rBokeh нет. Более того, когда вы указываете 'width = 800' в вызове' figure() ', гексбины на графике растягиваются (в отличие от базисных графических точек, которые изменяются динамически). – Skumin

 Смежные вопросы

  • Нет связанных вопросов^_^