Изменить цвет узлов на диаграмме Санки rCharts в R

Я сделал диаграмму Санки, используя rCharts. Вот пример моего кода. Данные основаны на этом URL (http://timelyportfolio.github.io/rCharts_d3_sankey/example_build_network_sankey.html )

library(devtools)
library(rjson)
library(igraph)

devtools::install_github("ramnathv/rCharts")

library(rCharts)

 g2 <- graph.tree(40, children=4)
 V(g2)$weight = 0
 V(g2)[degree(g2,mode="out")==0]$weight <- runif(n=length(V(g2)[degree(g2,mode="out")==0]),min=0,max=100)
 E(g2)[to(V(g2)$weight>0)]$weight <- V(g2)[V(g2)$weight>0]$weight

while(max(is.na(E(g2)$weight))) {
  df <- get.data.frame(g2)
  for (i in 1:nrow(df)) {
    x = df[i,]
    if(max(df$from==x$to)) {
      E(g2)[from(x$from) & to(x$to)]$weight = sum(E(g2)[from(x$to)]$weight)
    }
  }
}

edgelistWeight <- get.data.frame(g2)
colnames(edgelistWeight) <- c("source","target","value")
edgelistWeight$source <- as.character(edgelistWeight$source)
edgelistWeight$target <- as.character(edgelistWeight$target)

sankeyPlot2 <- rCharts$new()
sankeyPlot2$setLib('http://timelyportfolio.github.io/rCharts_d3_sankey')
sankeyPlot2$set(
     data = edgelistWeight,
     nodeWidth = 15,
     nodePadding = 10,
     layout = 32,
     width = 960,
     height = 500
 )

sankeyPlot2

Это результат диаграммы Санки. диаграмма Санки

В этом случае мне нужно изменить цвет узлов. Это потому, что мне нужно выделить некоторые узлы, такие как номер 2 и 7. Итак, в результате я хочу, чтобы числа 2 и 7 были красного цвета, а другие узлы имели тот же цвет, например серый.

Как я могу справиться с этой проблемой?


person kmangyo    schedule 13.02.2015    source источник


Ответы (1)


Я не очень разбираюсь в Javascript, поэтому, возможно, есть место для улучшения, но вы можете установить цвета, добавив это:

sankeyPlot2$setTemplate(
  afterScript = "
<script>
  d3.selectAll('#{{ chartId }} svg .node rect')
    .style('stroke', 'none')
    .style('fill', function(d){
      return('#999999')
  })
   d3.select('#{{ chartId }} svg .node:nth-child(2) rect')
    .style('fill', function(d){
      return('#ff0000')
  })
   d3.select('#{{ chartId }} svg .node:nth-child(7) rect')
    .style('fill', function(d){
      return('#ff0000')
  })
  d3.selectAll('#{{ chartId }} svg path.link')
    .style('stroke', function(d){
      if (d.source.name == 2 | d.source.name == 7) { 
        return('#ff0000'); 
      } else { 
        return('#999999');
      }
    })
</script>
") 
sankeyPlot2

результат

(аналогично)

person lukeA    schedule 13.02.2015
comment
Спасибо за помощь! У меня есть еще один вопрос. Могу ли я установить цвета ссылок, используя ваш метод? - person kmangyo; 13.02.2015
comment
Да, смотрите мое редактирование. PS: метод в основном взят из @timelyportfolio - stackoverflow.com/questions/25412223/ - person lukeA; 13.02.2015