给一个(大的)Plotly表格添加悬停效果,例如工具提示?

3
我是新手程序员,只有相当经验的R。我正在努力生成一个大表格,在相关单元格上悬停鼠标时,单元格内容将会扩展。这类似于此问题中提出的建议
然而,在另一个示例中使用了两个表格,其中表2作为工具提示单元格内容的参考,并且两者都显示出来。我想只显示一个表格,从而使大表格变得更加精简。
我已经制作了下面的示例,以小表格的形式呈现,并引用包含有关相关列悬停光标的额外信息的向量。希望这足够有用以解决问题?
当用鼠标悬停在相应的单元格上时,如何实现工具提示以显示参考向量的内容?
library(plotly)
#Preparing the dataset
SeqName<-c("1", "2", "3", "4", "5", "6")
Length<-c("440", "511", "1087", "686", "867", "632")
Cys<-c("3", "2", "2", "2", "2", "4")
NT<-c("[NA]", "[B]", "[B]", "[B]", "[B]", "[B]")
NR<-c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]")
RefSeq<-c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]")
data<-data.frame(SeqName, Length, Cys, NT, NR, RefSeq)

#making the table from the dataset
plot_ly(type="table",header=list(values=names(data)), cells=list(values=unname(data)))

#Text for tooltip to work on relevant columns
NT_info<-c("---NA---", "Solenopsis invicta uncharacterized LOC105206585 (LOC105206585) mRNA", "Pogonomyrmex barbatus glucose transporter type 1 (LOC105425888) transcript variant mRNA", "Solenopsis invicta RNA-directed DNA polymerase from mobile element jockey-like (LOC105204251) mRNA", "Solenopsis invicta uncharacterized LOC105205677 (LOC105205677) mRNA", "Zebrafish DNA sequence from clone DKEY-103J14 in linkage group complete sequence"),
NR_info<-c("---NA---", "PREDICTED: uncharacterized protein LOC105206585, partial", "glucose transporter type 1 isoform X7", "RNA-directed DNA polymerase from mobile element jockey-like", "rna-directed dna polymerase from mobile element jockey", "---NA---")
RefSeq_info<-c("---NA---", "---NA---", "GTR1_DROME Glucose transporter type 1 OS=Drosophila melanogaster GN=Glut1 PE=2 SV=4", "---NA---", "---NA---", "---NA---")   

我无法弄清如何从相关的“*_info”向量中检索信息,并在这个表上产生一个工具提示。请帮忙吗?先感谢您。

1个回答

3

如果我理解正确,您对此解决方案的问题在于应用程序中同时显示了您想要显示的表格和带有工具提示的表格。 如果是这样,解决您的问题的方法是使用完全相同的方法,但只隐藏带有工具提示内容的表格。 下面是使用您的数据调整后的代码:

library(shiny)
library(DT)

shinyApp(

  ui = fluidPage(

    shiny::tags$head(shiny::tags$style(HTML("
                                            #tableWithHoverData {
                                            visibility: hidden;
                                            height: 1px !important;
                                            }
                                            #tableWithHoverData * {
                                            visibility: hidden;
                                            height: 1px !important;
                                            }
                                            "))
    ),

    dataTableOutput('mytable'),
    dataTableOutput('tableWithHoverData'),
    p("Text below table, 'tableWithHoverData' does not occupy space")
    ),

  server = function(session, input, output) {

    SeqName<-c("1", "2", "3", "4", "5", "6")
    Length<-c("440", "511", "1087", "686", "867", "632")
    Cys<-c("3", "2", "2", "2", "2", "4")
    NT<-c("[NA]", "[B]", "[B]", "[B]", "[B]", "[B]")
    NR<-c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]")
    RefSeq<-c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]")

    table_show <- data.frame(SeqName, Length, Cys, NT, NR, RefSeq)

    NT_info<-c("---NA---", "Solenopsis invicta uncharacterized LOC105206585 (LOC105206585) mRNA", "Pogonomyrmex barbatus glucose transporter type 1 (LOC105425888) transcript variant mRNA", "Solenopsis invicta RNA-directed DNA polymerase from mobile element jockey-like (LOC105204251) mRNA", "Solenopsis invicta uncharacterized LOC105205677 (LOC105205677) mRNA", "Zebrafish DNA sequence from clone DKEY-103J14 in linkage group complete sequence")
    NR_info<-c("---NA---", "PREDICTED: uncharacterized protein LOC105206585, partial", "glucose transporter type 1 isoform X7", "RNA-directed DNA polymerase from mobile element jockey-like", "rna-directed dna polymerase from mobile element jockey", "---NA---")
    RefSeq_info<-c("---NA---", "---NA---", "GTR1_DROME Glucose transporter type 1 OS=Drosophila melanogaster GN=Glut1 PE=2 SV=4", "---NA---", "---NA---", "---NA---")   

    # for columns where you don't want hover, add NAs
    table_tooltip <- data.frame(rep(NA, 6), rep(NA, 6), rep(NA, 6), NT_info, NR_info, RefSeq_info)

    observeEvent(input$hoveredCellInfo, {
      info <- input$hoveredCellInfo
      content <- as.character(table2[info$row, info$column])
    })

    output$mytable <- renderDataTable({
      datatable(table_show, rownames = F,
                callback = JS("
                              table.on('mouseenter', 'tbody td', function() {
                              var column = $(this).index();
                              var hover_row = $(this).parent().index();
                              var correct_row = $('#mytable').find('tbody tr').eq(hover_row).children().first().text() - 1;

                              var dataFromOtherTable = $('#tableWithHoverData').find('tbody tr').eq(correct_row).find('td').eq(column).text();

                              this.setAttribute('title', dataFromOtherTable);
                              });

                              return table;
                              ")
                )
  })

    output$tableWithHoverData <- renderDataTable({
      datatable(table_tooltip, rownames = F)
    })
  }
      )

您还可以使用代码将 CSS 放在单独的文件中,以隐藏“工具提示表格”,请参见这里

很好,谢谢!但是我发现两个问题:(i)当表格被排序时,工具提示表保持静态,因此参考丢失;(ii)如果我在其他地方发布它(例如科学期刊),总会需要下面的空白空间。 - Scientist
你知道如何在两个表之间“同步”排序和搜索吗? - Scientist
1
@Scientist 很好的观点。问题(ii)可以通过设置 tableWithHoverData(及其子元素)的高度来解决。问题(i)可以通过更改jquery选择器来解决。请查看我的编辑,测试是否现在可行。重要提示:此解决方案依赖于第一列(SeqName)具有原始索引值(1-6) - 它用于从“工具提示表”中检索内容。如果需要,您可以将其重命名,但它必须保留在那里。 - pieca
嗨!它运行良好,谢谢!!我正在尝试将其与一个更大的表格实现,但我认为最终我会做到。(太大了,无法发布到SE溢出,我很担心!..)。谢谢! - Scientist
我仍然有一个无法解决的疑问。如果表格上有多个页面,则我无法获取其他页面条目的工具提示信息!我的表格非常大,即很长。 - Scientist
1
@Scientist renderDataTable 只在网页上呈现可见的行(在浏览器中打开应用程序并转到查看页面源代码以验证)。要使用多页表,请尝试以下方法之一:1)通过选项强制呈现整个“工具提示表”2)将工具提示内容定义移动到javascript文件中,并从那里获取。 - pieca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接