Матрица участков с парящей надписью в Shiny - PullRequest
0 голосов
/ 12 апреля 2020

Я строю матрицу символов ДНК в блестящем с помощью пакета plot.matrix, который позволяет составлять нечислительную c матрицу

Я хочу создать матричный сюжет в блестящем и сделать его интерактивным, где при наведении курсора на последовательность появляется имя последовательности.

Например, в приведенном ниже примере метками наведения будут названия строк R1, R2 et c,

. хорошие пакеты или способы сделать это?

См. ниже для упрощенного примера моего текущего кода:

library(plot.matrix)
library(shiny)

matsample<- cbind(c("A","A","A","T"),c("A","A","A","T"),c("A","A","A","G"))
rownames(matsample) <- c("R1","R2","R3","R4")

ui <-  plotOutput("matimage")

server <- function(input, output){

output$matimage <- renderPlot({
        plot(matsample,col=rainbow(7),fmt.cell='%s',las=1, cex=0.5)},
        width=200,
        units='px')

}

shinyApp(ui = ui, server = server)

1 Ответ

1 голос
/ 12 апреля 2020

Если вы хотите использовать plotly, вы можете использовать heatmaply, например:

library(shiny)
library(plotly)
library(heatmaply)
alph <- c("A"=1, "C"=2, "G"=3, "T"=4, "I"=5, "U"=6, "N"=7)
seq <- factor(names(alph), unique(names(alph)))

# matsample <- cbind(c("A","A","A","T"),c("A","A","A","T"),c("A","A","A","G"))

matsample <- matrix(sample(names(alph), 4000, replace = TRUE), nrow=4)
ms <- matrix(alph[matsample], ncol = ncol(matsample), byrow=FALSE)
rownames(matsample) <- c("R1","R2","R3","R4")
rownames(ms) <- rownames(matsample)
mm <- data.frame(do.call(rbind, lapply(rownames(ms), rep, ncol(matsample))))
ui <-  plotlyOutput("matimage", width = 160 + (ncol(matsample)*20))

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

  output$matimage <- renderPlotly({
    heatmaply(ms, custom_hovertext = mm,
              cellnote = matsample,
              show_dendrogram = c(FALSE, FALSE),
              Rowv=NULL, Colv=NULL, color=rainbow(7),
              hide_colorbar=TRUE,
              plot_method = "plotly")
  })
})


shinyApp(ui = ui, server = server)

...