繁体   English   中英

在D3.js饼图上显示标签

[英]Displaying Labels on D3.js Pie Graph

我正在尝试使用以下代码在简单的D3.js饼图上显示标签:

HTML:

<div id="chart"></div>

JS:

(function(d3) {

    var last_login_today = <?php echo json_encode($last_login_today_count); ?>;
    var last_login_before_today = <?php echo json_encode($did_not_login_today_count); ?>;       

    'use strict';

    var dataset = [
      { label: 'Logged in Today', count: last_login_today }, 
      { label: 'Logged in Before Today', count: last_login_before_today }
    ];

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

    var color = d3.scale.category20b();

    var svg = d3.select('#chart')
      .append('svg')
      .attr('width', width)
      .attr('height', height)
      .append('g')
      .attr('transform', 'translate(' + (width / 2) + 
        ',' + (height / 2) + ')');

    var arc = d3.svg.arc()
      .outerRadius(radius);

    var pie = d3.layout.pie()
      .value(function(d) { return d.count; })
      .sort(null);

    var path = svg.selectAll('path')
      .data(pie(dataset))
      .enter()
      .append('path')
      .attr('d', arc)
      .attr('fill', function(d, i) { 
        return color(d.data.label);
      });

  })(window.d3);

图表本身已正确填充,但是未显示标签“今天登录”和“今天之前登录”。

我将从此开始,由于未知的字符串长度,动态地执行py标签上的标签很麻烦。

我用它来找到角度点,所以我可以左/右

            function midAngle(d) {
                return d.startAngle + ((d.endAngle - d.startAngle) / 2);
            }

而且你需要这个

                var labels = svg.append("g")
                                .attr("class", "labels")
                                .selectAll("text")
                                    .data(pie(dataset))
                                    .enter()
                                    .append("text")
                                        .attr("transform", function (d) {
                                            this._current = this._current || d;
                                            var interpolate = d3.interpolate(this._current, d);
                                            var d2 = interpolate(0);
                                            var pos = arc.centroid(d2);
                                            pos[0] = radius * (midAngle(d2) < Math.PI ? 1.2 : -1.2));
                                            return "translate(" + pos + ")";
                                        })
                                        .attr("dy", ".35em")
                                        .style("text-anchor", "end")
                                        .text(function (d) {
                                            return d.data.Label;
                                        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM