use*_*450 12 javascript layout treemap d3.js
我需要创建一个自定义的d3布局,它有点接近树形图但是采用三角形样式.这是一个截图,以便您可以理解:
金字塔布局
正如你所看到的,它的工作非常整洁,符合我的需要.为了编码,我将代码基于树图布局代码:
d3.layout.pyramid= function () {
var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = 0;
function populate (nodes, currentHeight, currentHeightPadded, currentBase, currentSumedWeight) {
...
}
function populate_layers (layer, nodes,currentHeight,currentLength, currentSumedArea,currentSumedWeight) {
...
}
function pyramid(d) {
var nodes = hierarchy(d), root = nodes[0];
populate(root.children.slice(),0,0,0,0);
return nodes;
}
pyramid.padding = function(x) {
if (!arguments.length) return padding;
padding = x;
return pyramid;
};
pyramid.size = function(x) {
if (!arguments.length) return size;
size = x;
return pyramid;
};
return d3_layout_hierarchyRebind(pyramid, hierarchy);
};
Run Code Online (Sandbox Code Playgroud)
我的问题是,为此,我必须直接编辑该d3.v2.js文件,因为在我的情况下,某些私有函数无法从outisde访问d3_layout_hierarchyRebind.很明显,我知道这不是最好的做法,但是我无法在单独的脚本中将我的文件外部化,因为d3_layout_hierarchyRebindis从外面看不到.
我不知道这是否与d3或javascript有关,但我想知道你是否可以帮助我解决这个小问题.
提前致谢!
只需将 d3.layout.pyramid 函数复制并粘贴到新文件中,并根据需要重命名函数,这样它就不会与 d3 库冲突。可能所有内容都是私有的,因此只有最外层的函数需要重命名。您可能不必将其命名为“d3”。也就是说,这应该有效:
var myPyramidLayout = function () {
...
}
Run Code Online (Sandbox Code Playgroud)