2017-05-26 1 views
1

J'ai commencé à utiliser shinyLP pour créer des éléments html et également créer des diagrammes de réseau à l'aide de visNetwork. J'ai remarqué que visNetwork affiche bien lorsqu'il est placé dans un panneau de puits ou aucun panneau du tout. Cependant, il ne s'affiche pas lorsqu'il est placé dans un tableau div, soit avec shinyLP, soit via HTML brut. Pour être bref, je montre seulement les différences de code entre ne pas être dans un panel et être dans un panel div. Est-ce que quelqu'un connaît un moyen de faire apparaître visNetwork dans ce type de conteneur spécifique? Je veux utiliser ce type de conteneur parce que je veux garder mon CSS comme il est et ne pas changer les choses juste pour ce conteneur. Quelqu'un connaît la cause de ce problème?visNetwork ne s'affiche pas dans le panneau div

Cela fonctionne quand visNetworkOutput n'est pas dans un panneau

library(shinyLP) 
library(visNetwork) 

ui <- fluidPage(

visNetworkOutput("network") 

) 

server <- function(input, output) { 

    output$network <- renderVisNetwork({ 
    # minimal example 
     nodes <- data.frame(id = 1:3) 
     edges <- data.frame(from = c(1,2), to = c(1,3)) 

     visNetwork(nodes, edges) 
    }) 
} 

shinyApp(ui, server) 

Cela ne s'affiche lorsque visNetworkOutput est dans un panneau

ui <- fluidPage(

    panel_div("default", "", visNetworkOutput("network")) 

) 

server <- function(input, output) { 

    output$network <- renderVisNetwork({ 
     # minimal example 
     nodes <- data.frame(id = 1:3) 
     edges <- data.frame(from = c(1,2), to = c(1,3)) 

     visNetwork(nodes, edges) 
    }) 
} 

shinyApp(ui, server) 
+0

Que essayez-vous exactement avec 'panel_div()'? Si vous regardez la documentation, vous verrez: 'panel_div (class_type, panel_title, content)' que vous essayez de passer votre réseau comme le paramètre 'content', qui est décrit comme:" un [n] objet de caractère de classe, indiquant contenu textuel ". Donc votre sortie sera convertie en caractère de type et elle ne sera pas affichée, ... – BigDataScientist

+0

Non, c'est juste un bug je pense :). Mais il se pourrait bien que cela n'ait pas été testé - c'est-à-dire pas dans la matrice de test. –

Répondre

1

Il est un bug dans la version 1.1.0 shinyJS. J'ai trouvé une solution de contournement (maladroite) et l'ai affichée comme un bug dans htmlwidgets et Joe Cheng l'a vu et m'a donné une solution en 10 minutes. Impressionnant ...

Voici le code avec une meilleure solution (une nouvelle définition de pandel_div):

library(shiny) 
library(shinyLP) 
library(visNetwork) 

# override the currently broken definition in shinyLP version 1.1.0 
panel_div <- function(class_type, panel_title, content) { 
    div(class = sprintf("panel panel-%s", class_type), 
     div(class = "panel-heading", 
      h3(class = "panel-title", panel_title) 
    ), 
     div(class = "panel-body", content) 
) 
} 

ui <- fluidPage(
    panel_div("default", "panel1",visNetworkOutput("network") ) 
) 

server <- function(input, output) { 

    output$network <- renderVisNetwork({ 
    # minimal network 
    nodes <- data.frame(id = 1:3) 
    edges <- data.frame(from = c(1,2), to = c(1,3)) 
    visNetwork(nodes,edges) 
    }) 

} 
shinyApp(ui, server) 

Et voici ce qui ressemble à:

enter image description here

mise à jour : Essayé avec un autre htmlwidget package (sigma) et a le même comportement. Donc, le dépôt de cela comme un bug htmlwidget: panel_div htmlwidget issue

mise à jour: JC a identifié comme un bug shinyJS. Changé ma solution ci-dessus pour refléter sa suggestion.

+0

Curieux de savoir, cela a-t-il fonctionné pour vous? –

+1

Je l'ai essayé ce matin au boulot et ça a marché comme un charme! Merci pour la réponse rapide et complète. – georgemirandajr