闪亮的应用程序修改节点并将颜色链接到自己的数据

时间:2018-07-18 06:05:27

标签: shiny sankey-diagram htmlwidgets networkd3

我正在使用包中的sankeyNetwork()基于CSV文件输入的数据(如本文中所包含的数据),在应用程序上显示Sankey图

我无法按组为sankey图中的链接着色。

这是我使用的代码:

server <- function(input, output) {
  data <- reactive({
    file1 <- input$myData
    if (is.null(file1)) {
      return(NULL)
    }
    read.csv(file = file1$datapath,
             sep = input$sep,
             header = TRUE)
  })



  label <- reactive({
    file1 <- input$myLabels
    if (is.null(file1)) {
      return(NULL)
    }
    read.csv(file = file1$datapath,
             sep = input$sep,
             header = TRUE)
  })


  output$splot <- renderSankeyNetwork({
    print(names(data()))
    sankeyNetwork(
      Links = data(),
      Nodes = label(),
      Source = 'source',
      Target = 'target',
      Value = 'value',
      NodeID = "name",
      fontSize = input$x,
      nodeWidth =0.6*input$x,
      NodeGroup = "ngroup", LinkGroup = "lgroup",

      iterations = 0
    )
  }) 
  output$tb <- renderUI({
    if (is.null(data()))
      h1("Check your files!", align='center'
      )
    else
      tabsetPanel(

        tabPanel("Sankey Diagram", sankeyNetworkOutput("splot")
                )

      )
  })
}

shinyApp(ui = ui, server = server)

我想知道如何在我的情况下使用colorScale,以便我可以修改颜色,因为当我启发charachter从中影响到colorScale时,我所有的尝试都使我误以为它没有显示od白色链接和黑色节点 >

# Add a 'group' column to each connection:
links$group=as.factor(c("type_a","type_a","type_a","type_b","type_b","type_b"))

# Add a 'group' column to each node. Here I decide to put all of them in the same group to make them grey
nodes$group=as.factor(c("my_unique_group"))

# Give a color for each group:
my_color <- 'd3.scaleOrdinal() .domain(["type_a", "type_b", "my_unique_group"]) .range(["blue", "pink", "grey"])'

# Make the Network
sankeyNetwork(Links = links, Nodes = nodes, Source = "IDsource", Target = "IDtarget", Value = "value", NodeID = "name", colourScale=my_color, LinkGroup="group", NodeGroup="group")

这是我的CSV数据: 1)数据:

source;target;value;lgroup
0;9;614;blue
0;10;14;pink
0;11;28;yellow
0;12;18;orange
0;13;10;red
0;14;12;green
1;9;512;blue
1;10;12;pink
1;11;10;yellow
1;12;8;orange
1;13;4;red
1;14;6;green
2;9;313;blue
2;10;13;pink
2;11;9;yellow
2;12;4;orange
2;13;3;red
2;14;3;green
3;9;48;blue
3;10;12;pink
3;11;1;yellow
3;12;1;orange
3;13;1;red
3;14;1;green
4;9;49;blue
4;10;8;pink
4;11;1;yellow
4;12;1;orange
4;13;1;red
4;14;1;green
5;9;37;blue
5;10;1;pink
5;11;1;yellow
5;12;1;orange
5;13;1;red
5;14;1;green
6;9;27;blue
6;10;1;pink
6;11;1;yellow
6;12;1;orange
6;13;1;red
6;14;1;green
7;9;23;blue
7;10;1;pink
7;11;1;yellow
7;12;1;orange
7;13;1;red
7;14;1;green
8;9;4;blue
8;10;1;pink
8;11;1;yellow
8;12;1;orange
8;13;1;red
8;14;1;green

2)标签

name;ngroup
Mosaique FM;violet
Jawhara FM;violet
Shems FM;violet
Panorama FM;violet
IFM;violet
Diwan FM;violet
Cap FM;violet
Express FM;violet
Knooz FM;violet
Like;blue
Love;pink
Haha;yellow
Sad;orange
Angry;red
Wow;green

1 个答案:

答案 0 :(得分:0)

这是一个可重现的示例,其中使用了一些数据和代码,演示了如何使用中的sankeyNetwork()来调整颜色。

library(networkD3)

links <- read.csv2(header = TRUE, as.is = TRUE, text = "
source;target;value;lgroup
0;1;614;type_a
0;2;14;type_a
1;3;28;type_b
1;4;18;type_b
2;3;10;type_b
2;4;12;type_b
")

nodes <- read.csv2(header = TRUE, as.is = TRUE, text = "
name;ngroup
Mosaique FM;my_unique_group
Jawhara FM;my_unique_group
Shems FM;my_unique_group
Panorama FM;my_unique_group
IFM;my_unique_group
")

colorJS <- 'd3.scaleOrdinal().domain(["type_a", "type_b", "my_unique_group"])
              .range(["blue", "pink", "grey"])'

sankeyNetwork(Links = links, Nodes = nodes, Source = 'source', 
              Target = 'target', Value = 'value', NodeID = 'name',
              NodeGroup = 'ngroup', LinkGroup = 'lgroup', colourScale = colorJS)

enter image description here