javascript - 用数组数据绘制圆弧

标签 javascript d3.js svg

我可以画这样的弧:

    this.arc = D3['arc']()
        .innerRadius(200)
        .outerRadius(250)
        .startAngle(0)
        .endAngle(Math.PI);

    this.canvas = D3.select("#simpleChart").append("svg")
        .attr("width", Number((self.data[this.site].w + 50)))
        .attr("height", Number((this.data[this.site].h + 50)))
        .attr("style", "outline: thin solid red;");
    let arcTest = this.canvas.append('g')
        .attr('class', 'testtest');

    arcTest.append('path')
        .attr('d', this.arc);

但是,我尝试绑定(bind)数据来绘制多个圆弧,但无法使其工作:

let p = Math.PI * 2
let arcData = [
        [{
            startAngle: 0,
            endAngle: 1.25
        }],
        [{
            startAngle: 2,
            endAngle: 3.25
        }]
    ] //i also tried it with just an array of obj [{},{}]

this.arc = D3['arc']()
    .innerRadius(200)
    .outerRadius(250)
    .startAngle(function(d) {
        return d.startAngle
    })
    .endAngle(function(d) {
        return d.endAngle
    });


let arcTest = this.canvas.append('g')
    .attr('class', 'testtest')
    .attr('transform', 'translate(200,200)');



arcTest.selectAll(".entranceArc")
    .data(this.arcData)
    .attr("d", this.arc)
    .enter()
    .append("path")
    .attr('class', 'entranceArc')
    .attr("fill", "none")
    .attr("stroke", "black");

我错过了什么?

最佳答案

您必须在附加路径之后设置d属性。

所以,而不是:

arcTest.selectAll(".entranceArc")
    .data(this.arcData)
    .attr("d", this.arc)
    .enter()
    .append("path")
    .attr('class', 'entranceArc')
    .attr("fill", "none")
    .attr("stroke", "black");

应该是:

arcTest.selectAll(".entranceArc")
    .data(this.arcData)
    .enter()
    .append("path")
    .attr("d", this.arc)
    .attr('class', 'entranceArc')
    .attr("fill", "none")
    .attr("stroke", "black");

这是一个演示:

let p = Math.PI * 2
let arcData = [{
    startAngle: 0,
    endAngle: 1.25
}, {
    startAngle: 2,
    endAngle: 3.25
}];

let arc = d3.arc()
    .innerRadius(100)
    .outerRadius(150)
    .startAngle(function(d) {
        return d.startAngle
    })
    .endAngle(function(d) {
        return d.endAngle
    });

let svg = d3.select("body")
    .append("svg")
    .attr("width", 400)
    .attr("height", 400);

let group = svg.append("g")
    .attr("transform", "translate(200,200)")

let arcTest = group.selectAll(".entranceArc")
    .data(arcData)
    .enter()
    .append("path")
    .attr("d", arc)
    .attr('class', 'entranceArc')
    .attr("fill", "none")
    .attr("stroke", "black");
<script src="https://d3js.org/d3.v4.min.js"></script>

关于javascript - 用数组数据绘制圆弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254438/

相关文章:

javascript - Mongodb 聚合移动平均线计算

javascript - Angular 2 中页面加载时未调用 jQuery 函数

javascript - 根据D3图中的节点位置调整链路起点和终点

javascript - d3.js 以图像作为标签的雷达图

svg - 宽度和高度在 SVG <use> 元素中不起作用

javascript - 所有 jQuery 对象的公共(public)属性

javascript - 运行 Babel 应用程序时出错

javascript - D3 : data update "enter" selection is empty

css - Chrome 上 <g> 标签内的 SVG 元素 CSS 过渡

javascript - SVG 的渲染可以推迟到我完成对它的操作吗?