sankey图与rCharts成为闪亮的应用程序。颜色问题

时间:2016-12-11 17:56:47

标签: r shiny rcharts sankey-diagram

我正在使用rCharts创建一个Sankey情节

library(networkD3)
library(rCharts)
source1 = c('Proizvodnja okroglega lesa', 'Uvoz okroglega lesa', 'Poraba okroglega lesa', 'Poraba okroglega lesa',
            'Zage','Zage','Zage', 'Zagan les','Uvoz zaganega lesa','Zagan les','Stanje','Stanje')
target1=c('Poraba okroglega lesa','Poraba okroglega lesa', 'Izvoz okroglega lesa', 'Zage', 'Celuloza in plosce',
          'Energetska raba','Zagan les', 'Lesni ostanki','Stanje','Stanje',
          'Poraba zaganega lesa v Sloveniji', 'Izvoz zaganega lesa')
value1 = c(2.765, 0.152, 1.372, 1.545, 0.340, 0.205, 1,0.350, 0.814, 0.650, 0.521, 0.943)

links=data.frame(source1, target1, value1)
colnames(links) <- c("source", "target", "value")

links$source <- sapply(links$source, FUN = function(x) {return(as.character(nodes[x+1]))}) #x+1 since js starts at 0
links$target <- sapply(links$target, FUN = function(x) {return(nodes[x+1])}) #x+1 since js starts at 0
sankeyPlot <- rCharts$new()
sankeyPlot$setLib('http://timelyportfolio.github.io/rCharts_d3_sankey')
sankeyPlot$set(
  data = links,
  nodeWidth = 30,
  nodePadding = 80,
  layout = 100,
  width = 900,
  height = 500,
  units = "TWh",
  NodeGroup = links$group,
  title = "Sankey Diagram",
  fontSize = 1, 
  opacity = 0.9
)

sankeyPlot$setTemplate(
  afterScript = "
  <script>
  var cscale = d3.scale.category20b();

  // to be specific in case you have more than one chart
  d3.selectAll('#{{ chartId }} svg path.link')
  .style('stroke', function(d){
  //here we will use the source color
  //if you want target then sub target for source
  //or if you want something other than gray
  //supply a constant
  //or use a categorical scale or gradient
  //return d.source.color;
  return cscale(d.source.name);
  })
  //note no changes were made to opacity
  //to do uncomment below but will affect mouseover
  //so will need to define mouseover and mouseout
  //happy to show how to do this also
  // .style('stroke-opacity', .7)
  d3.selectAll('#{{ chartId }} svg .node rect')
  .style('fill', function(d){
  return cscale(d.name)
  })
  .style('stroke', 'none')
  </script>
  ")
sankeyPlot

现在,我想使用相同的图来创建一个闪亮的应用程序。这段代码可以解决问题:

require(shiny)
runApp(list(
  ui = pageWithSidebar(
    headerPanel('Test'),
    sidebarPanel(  'Test'  ),
    mainPanel(
      chartOutput("Plot", 'C:/Users/JernejJ/Documents/R/win-library/3.2/rCharts/widgets/d3_sankey')  
    )
  ),
  server = function(input, output, session){

    source1 = c('Proizvodnja okroglega lesa', 'Uvoz okroglega lesa', 'Poraba okroglega lesa', 'Poraba okroglega lesa',
                'Zage','Zage','Zage', 'Zagan les','Uvoz zaganega lesa','Zagan les','Stanje','Stanje')
    target1=c('Poraba okroglega lesa','Poraba okroglega lesa', 'Izvoz okroglega lesa', 'Zage', 'Celuloza in plosce',
              'Energetska raba','Zagan les', 'Lesni ostanki','Stanje','Stanje',
              'Poraba zaganega lesa v Sloveniji', 'Izvoz zaganega lesa')
    value1 = c(2.765, 0.152, 1.372, 1.545, 0.340, 0.205, 1,0.350, 0.814, 0.650, 0.521, 0.943)
    group = c(1,1,1,1,1,1,1,1,1,1,1,1)

    links=data.frame(source1, target1, value1, group)
    colnames(links) <- c("source", "target", "value", 'group')
    output$Plot <-  renderChart2({
      sankeyPlot2 <- rCharts$new()
      sankeyPlot2$setLib('C:/Users/JernejJ/Documents/R/win-library/3.2/rCharts/widgets/d3_sankey')
      sankeyPlot2$set(
        data = links,
        nodeWidth = 50,
        nodePadding = 80,
        layout = 100,
        width = 960,
        height = 500,
        units = "TWh",
        title = "Sankey Diagram"
      )
      sankeyPlot2$setTemplate(
        afterScript = "
  <script>
  var cscale = d3.scale.category20b();

  // to be specific in case you have more than one chart
  d3.selectAll('#{{ chartId }} svg path.link')
  .style('stroke', function(d){
  //here we will use the source color
  //if you want target then sub target for source
  //or if you want something other than gray
  //supply a constant
  //or use a categorical scale or gradient
  //return d.source.color;
  return cscale(d.source.name);
  })
  //note no changes were made to opacity
  //to do uncomment below but will affect mouseover
  //so will need to define mouseover and mouseout
  //happy to show how to do this also
  // .style('stroke-opacity', .7)
  d3.selectAll('#{{ chartId }} svg .node rect')
  .style('fill', function(d){
  return cscale(d.name)
  })
  .style('stroke', 'none')
  </script>
  ")
      sankeyPlot2
    })
  }
))

一切都很好,但是在脚本之后定义的颜色不会改变。问题出在哪儿?

Bellow是我目前的sankey应用程序的PrtScr。为什么我会收到这封奇怪的字母d..ž?

enter image description here

0 个答案:

没有答案
相关问题