Сделайте plotlyOutput измерение реактивным - PullRequest
0 голосов
/ 17 апреля 2020

Я строю матрицу с использованием heatmaply и плотно. Я хочу, чтобы высота и ширина plotylOutput реагировали на размер матрицы

Если я использую реактивное значение в аргументе plotlyOutput width, я получаю следующую ошибку : Ошибка в htmltools :: validateCssUnit: CSS единицами должна быть одноэлементная цифра c или символьный вектор

. Ниже приведена минимальная версия моего кода:

library(shiny)
library(heatmaply)
library(plotly)

ui <- tags$div(id = "placeholderimage", uiOutput("plotlyimage"))



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

 matsample <- reactive({cbind(c("A","A","A","T"),c("A","A","A","T"),c("A","A","A","G"))})

    ranges <- reactiveValues(width_im = NULL,height_im=NULL)
    ranges$width_im <- reactive(ncol(matsample())*20)

 ms <- reactive({

        alph <- c("A"=1, "C"=2, "G"=3, "T"=4, "-"=5, "N"=6, "S"=7)
        ms <- matrix(alph[matsample()], ncol = ncol(matsample()), byrow=FALSE))
        rownames(ms) <- rownames(matsample())
        return(ms)
    })

    mm <- reactive({
        data.frame(do.call(rbind, lapply(rownames(ms()), rep, ncol(matsample()))))
    })

  output$matimage <- renderPlotly({
    heatmaply(ms(), custom_hovertext = mm(),
                  cellnote = matsample(),cellnote_size = 6,
                  cellnote_textposition = "middle center",
                  fontsize_col = 6,grid_gap = 1,grid_size = 0.01,
                  show_dendrogram = c(FALSE, FALSE),
                  Rowv=NULL, Colv=NULL, color=rainbow(7),
                  hide_colorbar=FALSE, plot_method = "plotly")
  })

 output$plotlyimage <- renderUI(
        tags$div(class="superbigimage",
                 plotlyOutput("testplot", **width = isolate(ranges$width_im)**)
    )

})

Этот код в настоящее время выдает ошибку из-за width = isolate (диапазоны $ width_im), как я могу сделать ширину реагирующей на размер матрицы? Обратите внимание, что моя настоящая работа имеет матрицы с более чем 600 столбцами

1 Ответ

0 голосов
/ 17 апреля 2020

Я забыл скобки и не нужно использовать изолят

output$plotlyimage <- renderUI(
        tags$div(class="superbigimage",
                 plotlyOutput("testplot", width = ranges$width_im())
    )
...