Авторазмер высоты ggplotly в блестящий - PullRequest
0 голосов
/ 20 февраля 2020

У меня очень высокий plotlyOutput (потому что у него много категорий на оси у). Если он отображается только с ggplotly(g), я получаю этот график с фиксированной высотой: Very short plot

Поэтому я указываю, что это height, вот так: ggplotly(g, height = 1500), я получить соответствующий размер (ниже приводится часть графика из-за его размера): enter image description here

Моя проблема заключается в том, что при фильтрации данных через элементы управления вводом моего приложения поддерживает высоту (потому что теперь она фиксирована), даже если на оси у очень мало категорий. Вот так (ниже часть графика из-за его размера):

enter image description here

Итак, ¿как я могу получить динамич c высота для моего plotlyOutput, например, когда есть, скажем, 3 категории по оси y, он корректирует height, чтобы он был короче, но при этом увеличивался максимум до 1500px с увеличением количества категорий?

1 Ответ

1 голос
/ 20 февраля 2020

Я не вижу никакого решения, кроме этого, которое вычисляет высоту в зависимости от количества категорий на графике:

library(shiny)
library(plotly)

dat <- data.frame(
  Letter = c(LETTERS,letters),
  height = rpois(52, 10)
)

ui <- fluidPage(
  checkboxInput("filter", "Filter"),
  plotlyOutput("ggly", height = "100%")
)

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

  output[["ggly"]] <- renderPlotly({
    ggdat <- if(input[["filter"]]) dat[dat$Letter %in% c("A","B"),] else dat
    height <- nlevels(droplevels(ggdat$Letter)) * 30
    gg <- ggplot(ggdat) + geom_col(aes(x = Letter, y = height)) + coord_flip()
    ggplotly(gg, height = min(1500, max(300, height)))
  })

}

shinyApp(ui, server)
...