【发布时间】:2018-10-18 20:57:11
【问题描述】:
我正在研究如何在我的公司中简化营销图形的创建。
特别是一个旭日图,它是在 Illustrator 中生成的(难以更新),我想将其切换为 D3 图形(通过 JSON 或 CSV 文件轻松更新)。问题是旭日形图的顺序是倒序...根节点在外环上,数据向内流动。 注意:我不能交换数据的顺序,它必须这样。
是否可以在 D3 中翻转旭日形图的绘制顺序?我一直在尝试排序功能...它按预期翻转了树根图的排序顺序...但似乎不会影响旭日图的排序顺序。
这是我正在使用的旭日形图(来自here):
// JSON data
var nodeData = {
"name": "TOPICS", "children": [{
"name": "Topic A",
"children": [{"name": "Sub A1", "size": 4}, {"name": "Sub A2", "size": 4}]
}, {
"name": "Topic B",
"children": [{"name": "Sub B1", "size": 3}, {"name": "Sub B2", "size": 3}, {
"name": "Sub B3", "size": 3}]
}, {
"name": "Topic C",
"children": [{"name": "Sub A1", "size": 4}, {"name": "Sub A2", "size": 4}]
}]
};
// Variables
var width = 500;
var height = 500;
var radius = Math.min(width, height) / 2;
var color = d3.scaleOrdinal(d3.schemeCategory20b);
// Create primary <g> element
var g = d3.select('svg')
.attr('width', width)
.attr('height', height)
.append('g')
.attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')');
// Data strucure
var partition = d3.partition()
.size([2 * Math.PI, radius]);
// Find data root
var root = d3.hierarchy(nodeData)
.sum(function (d) { return d.size});
// Size arcs
partition(root);
var arc = d3.arc()
.startAngle(function (d) { return d.x0 })
.endAngle(function (d) { return d.x1 })
.innerRadius(function (d) { return d.y0 })
.outerRadius(function (d) { return d.y1 });
// Put it all together
g.selectAll('path')
.data(root.descendants())
.enter().append('path')
.attr("display", function (d) { return d.depth ? null : "none"; })
.attr("d", arc)
.style('stroke', '#fff')
.style("fill", function (d) { return color((d.children ? d : d.parent).data.name); });
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg></svg>
非常感谢! jB
【问题讨论】:
-
安德鲁...非常感谢您的帮助。现在,我正在尝试使用此处找到的 Sunburst 构建示例...bl.ocks.org/denjn5/e1cdbbe586ac31747b4a304f8f86efa5我正在研究概念验证以出售图形利益相关者。我可能会与 coder 联系以构建最终版本……我的编码技能有点生疏。 ;-)
标签: javascript d3.js sunburst-diagram