在D3散点图圆形上添加标签

3
我试图使用D3.js为散点图中的每个圆添加标签,但无法理解如何实现。
以下是代码:https://jsfiddle.net/8e7qmzw8/;我想在每个圆上(内部或外部)添加属性“name”。
var data = [
    {"x": -123, "y": 63, "r": 37, "c": "#50C2E3", "name": "A"},
    {"x": 71, "y": 0, "r": 15, "c": "#50C2E3", "name": "B"},
    {"x": 3845, "y": 77, "r": 15, "c": "#50C2E3", "name": "C"},
    {"x": 3176, "y": 90, "r": 15, "c": "#50C2E3", "name": "D"},
    {"x": -17, "y": 56, "r": 15, "c": "#50C2E3", "name": "D"},
    {"x": 1357, "y": 58, "r": 15, "c": "#50C2E3", "name": "E"},
    {"x": 7684, "y": 75, "r": 15, "c": "#50C2E3", "name": "F"}
];

var width = 500;
var height = 500;

var margin = {
    top: 40,
    right: 40,
    bottom: 40,
    left: 40
};

var x = d3.scale.linear().range([0, width]);
var y = d3.scale.linear().range([height, 0]);

var minX = _(data).orderBy('x').first().x;
var maxX = _(data).orderBy('x').last().x;

x.domain([minX - 500, maxX + 500]);
y.domain([0, 100]);

var xAxis = d3.svg.axis()
        .scale(x)
        .orient("bottom");

var yAxis = d3.svg.axis()
        .scale(y)
        .orient("left");

var svg = d3
        .select("#d3")
        .append("svg")
        .attr("width", width + margin.left + margin.right)
        .attr("height", height + margin.top + margin.bottom)
        .append("g")
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

svg.append("g")
        .attr("class", "x axis")
        .attr("transform", "translate(" + 0 + "," + height / 2 + ")")
        .call(xAxis);

svg.append("g")
        .attr("class", "y axis")
        .attr("transform", "translate(" + width / 2 + "," + 0 + ")")
        .call(yAxis)
        .append("text");

svg.selectAll(".dot")
        .data(data)
        .enter().append("circle")
        .attr("class", "dot")
        .attr("r", function (d) {
            return d.r;
        })
        .attr("cx", function (d) {
            return x(d.x);
        })
        .attr("cy", function (d) {
            return y(d.y);
        })
        .style("fill", function (d) {
            return d.c;
        });

有什么想法吗?
1个回答

4
这是翻译的结果:

这是结果:https://jsfiddle.net/8e7qmzw8/1/

我将你的圆形和文本包裹在一个<g>中:

var gdots =  svg.selectAll("g.dot")
            .data(data)
            .enter().append('g');

然后将您的文本与圆圈放在<g>中。

圆圈:

gdots.append("circle")
            .attr("class", "dot")
            .attr("r", function (d) {
                return d.r;
            })
            .attr("cx", function (d) {
                return x(d.x);
            })
            .attr("cy", function (d) {
                return y(d.y);
            })
            .style("fill", function (d) {
                return d.c;
            });

和文本:

 gdots.append("text").text(function(d){
                    return d.name;
                })
                .attr("x", function (d) {
                    return x(d.x);
                })
                .attr("y", function (d) {
                    return y(d.y);
                });

您当然可以调整x和y,甚至可以添加dx和dy属性,使文本更加居中或放置在您想要的任何位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接