rCharts 桑基图中的单位
Units in rCharts sankey diagram
我正在使用以下代码生成 rCharts Sankey 图 (https://github.com/timelyportfolio/rCharts_d3_sankey):
if(!require(rCharts)){
library(devtools)
install_github('ramnathv/rCharts')
}
library(rCharts)
sankeyPlot <- rCharts$new()
sankeyPlot$setLib('http://timelyportfolio.github.io/rCharts_d3_sankey')
sankeyPlot$set(
data = data.frame(source=c('Cold','Warm','Total'),target=c('Total','Total','End'),value=c(20,80,100)),
nodeWidth = 15,
nodePadding = 10,
layout = 32,
width = 500,
height = 300,
units = "TWh",
labelFormat = ".1%"
)
sankeyPlot$setTemplate(
afterScript = "
<script>
// 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;
})
//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)
</script>
")
sankeyPlot
在 Sankeyplot$set
中,我设置了单位值。但是,我既没有看到单位,也没有看到值。单位示例来自官方 github 文档 (example_hirst_f1.R)。我如何在图表中显示值和单位?
在 sankeyPlot 输出中,使用 class="node" 创建了一个 svg g 元素。在此元素中,值及其单位被添加到 title 元素 中 rect 元素中,表示节点。此 title 元素不是可见元素。另一方面,名称被添加到文本元素中(在本例中 "warm")并且是可见的。
在Rstudio中右击视图window然后"inspect"就可以看到这个结构了。
Screenshot of the node structure in Web Inspector
快速解决方法是将值及其单位添加到此文本元素。
这是通过将 layout/charts.html 中的第 105 行替换为
来完成的
.text(function (d) { return d.name; })
和
.text(function (d) { return d.name + " " + format(d.value); })
然后以此为模板。
当然可能有更好的解决方案。我想 title 元素出于某种原因在那里(可能在鼠标悬停事件中使用它)。但至少这是一个开始。希望对你有帮助。
JeroenDM的回答也可以插入后记。在这种情况下,Github 存储库无需修改即可使用。
sankeyPlot$setTemplate(
afterScript = "
<script>
// 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;
})
//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)
units = ' TWh'
var formatNumber = d3.format('0,.0f'), // zero decimal places
format = function(d) { return formatNumber(d) + units; }
d3.selectAll('#{{ chartId }} svg .node text')
.text(function (d) { return d.name + ' (' + format(d.value) + ')'; })
</script>
")
我正在使用以下代码生成 rCharts Sankey 图 (https://github.com/timelyportfolio/rCharts_d3_sankey):
if(!require(rCharts)){
library(devtools)
install_github('ramnathv/rCharts')
}
library(rCharts)
sankeyPlot <- rCharts$new()
sankeyPlot$setLib('http://timelyportfolio.github.io/rCharts_d3_sankey')
sankeyPlot$set(
data = data.frame(source=c('Cold','Warm','Total'),target=c('Total','Total','End'),value=c(20,80,100)),
nodeWidth = 15,
nodePadding = 10,
layout = 32,
width = 500,
height = 300,
units = "TWh",
labelFormat = ".1%"
)
sankeyPlot$setTemplate(
afterScript = "
<script>
// 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;
})
//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)
</script>
")
sankeyPlot
在 Sankeyplot$set
中,我设置了单位值。但是,我既没有看到单位,也没有看到值。单位示例来自官方 github 文档 (example_hirst_f1.R)。我如何在图表中显示值和单位?
在 sankeyPlot 输出中,使用 class="node" 创建了一个 svg g 元素。在此元素中,值及其单位被添加到 title 元素 中 rect 元素中,表示节点。此 title 元素不是可见元素。另一方面,名称被添加到文本元素中(在本例中 "warm")并且是可见的。
在Rstudio中右击视图window然后"inspect"就可以看到这个结构了。
Screenshot of the node structure in Web Inspector
快速解决方法是将值及其单位添加到此文本元素。 这是通过将 layout/charts.html 中的第 105 行替换为
来完成的 .text(function (d) { return d.name; })
和
.text(function (d) { return d.name + " " + format(d.value); })
然后以此为模板。
当然可能有更好的解决方案。我想 title 元素出于某种原因在那里(可能在鼠标悬停事件中使用它)。但至少这是一个开始。希望对你有帮助。
JeroenDM的回答也可以插入后记。在这种情况下,Github 存储库无需修改即可使用。
sankeyPlot$setTemplate(
afterScript = "
<script>
// 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;
})
//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)
units = ' TWh'
var formatNumber = d3.format('0,.0f'), // zero decimal places
format = function(d) { return formatNumber(d) + units; }
d3.selectAll('#{{ chartId }} svg .node text')
.text(function (d) { return d.name + ' (' + format(d.value) + ')'; })
</script>
")