Javascript 创建自定义d3布局
我需要创建一个定制的d3布局,它有点接近树形图,但采用三角形样式。以下是一个屏幕截图,您可以了解: 正如你所看到的,它工作起来非常整洁,符合我的需要。 为了对其进行编码,我将代码基于treemap布局代码:Javascript 创建自定义d3布局,javascript,layout,d3.js,treemap,Javascript,Layout,D3.js,Treemap,我需要创建一个定制的d3布局,它有点接近树形图,但采用三角形样式。以下是一个屏幕截图,您可以了解: 正如你所看到的,它工作起来非常整洁,符合我的需要。 为了对其进行编码,我将代码基于treemap布局代码: d3.layout.pyramid= function () { var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = 0; function popul
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);
};
我的问题是,要这样做,我必须直接编辑d3.v2.js
文件,因为有些私有函数无法从outisde访问,在我的例子中是d3\u layout\u hierarchyRebind
。
显然,我知道这根本不是最好的做法,但我无法将我的文件外部化到单独的脚本中,因为从外部看不到
我不知道这是否是d3或javascript相关的问题,但我想知道您是否可以帮助我解决这个小问题
谢谢,这是事先准备好的 只需将d3.layout.pyramid函数复制并粘贴到新文件中,并根据需要重命名函数,这样它就不会与d3库冲突。可能所有内容都是私有的,因此只需要重命名最外层的函数。您可能不必将其命名为“d3”。也就是说,这应该是可行的:
var myPyramidLayout = function () {
...
}
看起来d3.js只是没有被设计成具有外部定义的布局。您可以将编写的布局合并到d3.js的自定义构建中。我看没有其他方法可以做到这一点。很好的问题和评论-观察到同样的问题。它从已经获得d3_标识开始……正如@ZachB所指出的,您可以创建一个布局,而无需使用d3名称空间。布局只是一个可配置的函数,它接收数据并返回转换后的数据,这正是您的函数所做的。