【问题标题】:Vertical Icicle in D3D3中的垂直冰柱
【发布时间】:2021-09-10 20:36:14
【问题描述】:

我需要将这个冰柱旋转到垂直(上下)方式:https://observablehq.com/@d3/zoomable-icicle。第一个屏幕选项有效,但是当我单击该项目时,它失败了。以下更改有效:

.attr("transform", d => "translate(" + d.x0 + "," + d.y0 + ")");

.attr("width", d => d.x1 - d.x0 - 1)
.attr("height", d => rectHeight(d))

function rectHeight(d) {
    return d.y1 - d.y0 - Math.min(1, (d.y1 - d.y0) / 2);
}

我在旋转缩放或点击功能时遇到问题:

function clicked(p) { focus = focus === p ? p = p.parent : p;

root.each(d => d.target = {
  x0: (d.x0 - p.x0) / (p.x1 - p.x0) * height,
  x1: (d.x1 - p.x0) / (p.x1 - p.x0) * height,
  y0: d.y0 - p.y0,
  y1: d.y1 - p.y0
});

const t = cell.transition().duration(750)
     .attr("transform", d => "translate(" + d.target.x0 + "," + d.target.y0 + ")");
 rect.transition(t).attr("height", d => rectHeight(d.target));
 text.transition(t).attr("fill-opacity", d => +labelVisible(d.target));
tspan.transition(t).attr("fill-opacity", d => labelVisible(d.target) * 0.7);
}

我尝试过反转 x 和 y。我把函数改成:

function clicked(p) { focus = focus === p ? p = p.parent : p;

root.each(d => d.target = {
  y1: (d.y0 - p.y0) / (p.y1 - p.y0) * width,
  y0: (d.y1 - p.y0) / (p.y1 - p.y0) * width,
  x1: d.x0 - p.x0,
  x0: d.x1 - p.x0
});

const t = cell.transition().duration(750)
     .attr("transform", d => "translate(" + d.target.x0 + "," + d.target.y0 + ")");
 rect.transition(t).attr("height", d => rectHeight(d.target));
 text.transition(t).attr("fill-opacity", d => +labelVisible(d.target));
tspan.transition(t).attr("fill-opacity", d => labelVisible(d.target) * 0.7);
}

还是不行,不知道怎么办。

【问题讨论】:

    标签: javascript d3.js tree icicle-diagram


    【解决方案1】:

    这是一个fork of that Observable notebook,它展示了如何做到这一点。

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      相关资源
      最近更新 更多