javascript - 在 D3.js 饼图上显示标签

标签 javascript d3.js pie-chart

我尝试使用以下代码在简单的 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);

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

最佳答案

我将从这个开始,由于未知的字符串长度,动态地制作馅饼上的标签是一件痛苦的事情。

我用它来找到 Angular 点,这样我就可以把它左/右

            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;
                                        });

关于javascript - 在 D3.js 饼图上显示标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33374943/

相关文章:

Javascript - 如何使用 RegExp 识别模式

javascript - 使用 d3 和 dc.js 自定义时间线刻度

javascript - 避免 d3 轴标签中的 dx/dy 属性

c# - 使用 3 个整数的值创建饼图

javascript - 如何使用 nlp-compromise 在 JavaScript 中进行基本的语境化?

c# - 来自 ASP.NET 的 FQL

javascript - D3.js 缩放在 Safari 中无法与鼠标滚轮配合使用

javascript - 如何在 pie amcharts 中只获取某些数据?

charts - 拉斐尔饼图颜色

javascript - 在 Ember.js 中获取路由列表