javascript - 具有可变填充的 D3 包布局

标签 javascript d3.js pack

我无法使用 d3.layout.pack().padding() 获得变量填充。 我想在组和叶节点处放置不同的填充。

d3.layout.pack()
.sort(null)
.size([this.width , this.height])
.children(function (d) {
    return d.values;
})
.value(function (d){
    return 1;
})
.padding(function (d){
    return d.padding;
})
.nodes({
    values: outerClusterData
})


// Sample data 
outerClusterData = [
    {
        key: "africa",
        padding: 100,
        values: [
            {
                name: "city1",
                padding: 10
            },
            {
                name: "city2",
                padding: 10 
            }
        ]
    },
    {
        key: "India",
        padding: 100,
        values: [
            {
                name: "city3",
                padding: 10
            },
            {
                name: "city4",
                padding: 10 
            }
        ] 
    }
]

最佳答案

考虑如下结构:

<svg>
 <g class="content-group">
</svg>

第 1 步:使用半径访问器将最小半径设置为某个恒定值。

第2步:在第1步之后,分组的圆将变得非常大,半径为 分组的圆是内边距+内圆占用的空间

第3步:使用高度和宽度设置ViewPort,使用高度和宽度属性,一旦内容绘制完毕,获取g.content-group的边界框,使用d3.select('g.content-group')。 node().bbox(),这将为您提供 x,y,高度,宽度。可以用来设置viewbox的属性 = "x y width height"

设视口(viewport)为 widthVP * heightVP,viewBox 为“x y width height”,则新坐标系的单位将等于 x 方向的 widthVP/width 和 y 方向的 heightVP/height。

关于javascript - 具有可变填充的 D3 包布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50470731/

相关文章:

javascript - nvd3 是否有现有方法可以向 nvd3 图表添加滚动条?

perl - 打包和解包 float 时如何消除浮点不准确?

c# - Python 的 struct.pack(fmt, v1, v2, ...) 在 C# .NET 中的等效项是什么?

javascript - 仅克隆不是函数的属性

javascript - js 控制台是否破坏了 jquery $() 函数?

javascript - D3 条形图和面积图的组合

javascript - 具有任意多条线(和特定数据格式)的 D3 线图

c++ - 如何打包模板类?

javascript - 在 jQuery 中选择单选按钮后锁定选择元素的方法

javascript - Web 动画 API - 不同的动画持续时间?