【问题标题】:Issue labeling d3 sunburst发布标签 d3 sunburst
【发布时间】:2014-01-10 21:28:57
【问题描述】:

我正在开发 d3 sunburst 类型。

一切正常,它正确地采用了耀斑 JSON,但是,当我去标记路径时,看看发生了什么:

代码如下:

var width = 960,
    height = 700,
    radius = Math.min(width, height) / 2;

var x = d3.scale.linear()
    .range([0, 2 * Math.PI]);

var y = d3.scale.linear()
    .range([0, radius]);

var hue = d3.scale.ordinal().range(["#feec76","#aec7e8","#ff00bf","#7f7f7f"]);

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height)
  .append("g")
    .attr("transform", "translate(" + width / 2 + "," + (height / 2 + 10) + ")");

var partition = d3.layout.partition()
    .value(function(d) { return d.size; });

var arc = d3.svg.arc()
    .startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })
    .endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })
    .innerRadius(function(d) { return Math.max(0, y(d.y)); })
    .outerRadius(function(d) { return Math.max(0, y(d.y + d.dy)); });

d3.json("http://api.printoriente.com/treemap.php", function(error, root) {
  var g = svg.selectAll("g")
      .data(partition.nodes(root))
    .enter().append("g");

  var path = g.append("path")
    .attr("d", arc)
    .style("fill", function(d) { return hue((d.children ? d : d.parent).name); })
    .on("click", click);

  var text = g.append("text")
    .attr("transform", function(d) { return "rotate(" + computeTextRotation(d) + ")"; })
    .attr("x", function(d) { return y(d.y); })
    .attr("dx", "6") // margin
    .attr("dy", ".35em") // vertical-align
    .text(function(d) { return d.name; });

而轮换码是:

function computeTextRotation(d) {
  return (x(d.x + d.dx / 2) - Math.PI / 2) / Math.PI * 180;
}

此脚本适用于所有其他 d3,但我必须为每条路径添加这些颜色。

问题出在哪里?

问候。

更新:d3 sunburst 小字体:

更新:我想要这样的东西:

更新:看看内部标签:

【问题讨论】:

  • 不确定你在说什么。您希望文本着色还是间距问题?
  • 标签之间的间距是问题所在。我是说此代码适用于其他 d3 sunbursts 但不适用于我的。忽略它,我的问题是标签。
  • 看图看标签T_T
  • 那是因为你的一些切片太小以至于标签太大了。您可以尝试将标签移到旭日之外,但是您的切片太小了,这不太可能有帮助。工具提示可能是更好的选择。
  • 这不是问题。查看更新,我设置了较小的字体大小,问题继续。

标签: javascript path d3.js label sunburst-diagram


【解决方案1】:

我不确定你从哪里得到计算角度的代码,但它似乎完全不正确。如果您查看this example,计算角度的代码是(其他一切都相同)

var angle = (d.x + d.dx / 2) * 180 / Math.PI - 90;

将示例中的代码替换为固定角度的代码。要固定位置,您可以调整标签的dx 偏移量,例如

.attr("dx", 50")

完整示例here

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2014-08-26
    • 2014-03-23
    相关资源
    最近更新 更多