2017-12-29 6 views
0

ich ein Sankey-Diagramm wie folgt erstellt:ein Sankey-Diagramm in Shiny Drucken

#install.packages("networkD3") 
library(networkD3) 
nodes = data.frame("name" = 
        c("Retour", # Node 0 
         "niet tevreden/ontevreden", # Node 1 
         "fout", # Node 2 
         "stuk", 
         "adres", 
         "verpakking", 
         "gebroken/glas"))# Node 3 
links = as.data.frame(matrix(c(
    0, 1, 10, # Each row represents a link. The first number 
    0, 2, 20, # represents the node being conntected from. 
    0, 3, 30, 
    2, 4, 8, 
    3, 5, 10, 
    3, 6, 12# the second number represents the node connected to. 
),# The third number is the value of the node 
    byrow = TRUE, ncol = 3)) 
names(links) = c("source", "target", "value") 
sankeyNetwork(Links = links, Nodes = nodes, 
       Source = "source", Target = "target", 
       Value = "value", NodeID = "name", 
       fontSize= 12, nodeWidth = 30) 

arbeiten gut, aber jetzt würde Ich mag diese Handlung in glänzend verwenden. Daher tat das folgende:

## app.R ## 
library(shinydashboard) 

ui <- dashboardPage(
    dashboardHeader(title = "Basic dashboard"), 
    dashboardSidebar(), 
    dashboardBody(
    # Boxes need to be put in a row (or column) 
    fluidRow(
     box(plotOutput("plot1", height = 250)) 
    ) 
) 
) 

library(networkD3) 
server <- function(input, output) { 

    histdata <- rnorm(500) 

    nodes = data.frame("name" = 
         c("Retour", # Node 0 
         "niet tevreden/ontevreden", # Node 1 
         "fout", # Node 2 
         "stuk", 
         "adres", 
         "verpakking", 
         "gebroken/glas"))# Node 3 
    links = as.data.frame(matrix(c(
    0, 1, 10, # Each row represents a link. The first number 
    0, 2, 20, # represents the node being conntected from. 
    0, 3, 30, 
    2, 4, 8, 
    3, 5, 10, 
    3, 6, 12# the second number represents the node connected to. 
),# The third number is the value of the node 
    byrow = TRUE, ncol = 3)) 
    names(links) = c("source", "target", "value") 

    output$plot1 <- renderPlot({ 
    sankeyNetwork(Links = links, Nodes = nodes, 
        Source = "source", Target = "target", 
        Value = "value", NodeID = "name", 
        fontSize= 12, nodeWidth = 30) 
    }) 
    output$plot2 <- renderPlot({ 
    data <- histdata[seq_len(10)] 
    hist(data) 
    }) 
} 

shinyApp(ui, server) 

Die Sache ist, dass Shiny aus irgendeinem Grund das Sankey-Diagramm lesen kann. Wenn ich ändern Sie den Code:

box(plotOutput("plot1", height = 250)) 

An:

box(plotOutput("plot2", height = 250)) 

Es wird das Histogramm aufgetragen ist. Mit dem Sankey-Diagramm scheint also etwas nicht in Ordnung zu sein. Irgendwelche Gedanken darüber, was das verursacht?

Antwort

1

Sie sollten die renderSankeyNetwork und sankeyNetworkOutput Funktionen in networkD3 anstelle von plotOutput und renderPlot. Also mit bereits Ihre Daten geladen, würde es aussehen ...

library(shiny) 
library(shinydashboard) 
library(networkD3) 

ui <- dashboardPage(
    dashboardHeader(title = "Basic dashboard"), 
    dashboardSidebar(), 
    dashboardBody(
    # Boxes need to be put in a row (or column) 
    fluidRow(
     sankeyNetworkOutput("plot") 
    ) 
) 
) 

server <- function(input, output) { 

    output$plot <- renderSankeyNetwork({ 
    sankeyNetwork(Links = links, Nodes = nodes, 
        Source = "source", Target = "target", 
        Value = "value", NodeID = "name", 
        fontSize= 12, nodeWidth = 30) 
    }) 
} 

shinyApp(ui, server) 

Siehe auch die example here