d3.js - 带刻度线的圆环图 (d3)

标签 d3.js line donut-chart

我有三个圆环图

变量数据 = [
{
机构:【53245、28479、19697、24037、40245】
},
{
机构:[45, 9, 127, 37, 11]
},
{
机构:[3245、88479、45697、1037、77245]
}
]

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

var color = d3.scale.category20();

for (index = 0; index < data.length; ++index) {

    var pie = d3.layout.pie()
        .sort(null);

    var arc = d3.svg.arc()
        .innerRadius(radius - 30)
        .outerRadius(radius - 5);

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

    var path = svg.selectAll("path")
    .data(pie(data[index].institution))
  .enter().append("path")
    .attr("fill", function(d, i) { return color(i); })
    .attr("d", arc);
}

对于每个图表中的每个段,我需要一条短线和一个带有值的标签,例如这里 enter image description here

有什么简单的解决方案吗?

最佳答案

Here 我的解决方案:

var data = [
    {
        institution: [53245, 28479, 19697, 24037, 40245]
    },
    {
        institution: [45, 9, 127, 37, 11]
    },
    {
        institution: [3245, 88479, 45697, 1037, 77245]
    }
];

var width = 200;
var height = 200;
var radius = Math.min(width, height) / 4;
var r = radius;
var textOffset=5;

var colours = ['#ffc400','#e53517','#7ab51d','#009fda','#c2c2c2'];

for (index = 0; index < data.length; ++index) {
    var pie = d3.layout.pie().sort(null);

    var arc = d3.svg.arc().innerRadius(radius - 30).outerRadius(radius - 5);

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

    var piedata=pie(data[index].institution);

    var ticks = svg.selectAll("line").data(piedata).enter().append("line");
    ticks.attr("x1", 0)
    .attr("x2", 0)
    .attr("y1", -radius+4)
    .attr("y2", -radius-2)
    .attr("stroke", "gray")
    .attr("transform", function(d) {
      return "rotate(" + (d.startAngle+d.endAngle)/2 * (180/Math.PI) + ")";
    });

    var labels = svg.selectAll("text").data(piedata).enter().append("text");
    labels.attr("class", "value")
    .attr("transform", function(d) {
       var dist=radius+15;
       var winkel=(d.startAngle+d.endAngle)/2;
       var x=dist*Math.sin(winkel);
       var y=-dist*Math.cos(winkel);
       return "translate(" + x + "," + y + ")";
    })
    .attr("dy", "0.35em")
    .attr("text-anchor", "middle")
    .text(function(d){
      return d.value;
    });

    var path = svg.selectAll("path")
        .data(piedata)
          .enter().append("path")
        .attr("fill", function(d, i) { return colours[i]; })
        .attr("d", arc);
}

关于d3.js - 带刻度线的圆环图 (d3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16441401/

相关文章:

javascript - 使用 D3.js 将元素放置在圆线上并朝中心旋转

csv - 在外部 csv 中创建带有 highcharts 和数据的折线图

r - 如何在R中将两列合并为一列,使第二列中的每个值都变成第一列中的每隔一个值?

Javascript:加载csv文件并将其打印到页面

javascript - D3 v4 单击可拖动的元素

arrays - Powershell逐字读取文本文件

javascript - HTML5 canvas ctx.fillText 不会换行?

d3.js - D3 donut 过渡,d,i 未定义

javascript - 将 border-radius 属性添加到 D3js 圆环图

javascript - D3 SVG 路径上的定位箭头