在 javascript 中使用 d3 绘制圆圈并在圆圈上书写文字

Drawing circles and writing text on them using d3 in javascript

我是一名新 javascript 程序员。我正在尝试制作一个可视化组件,其中我必须画一个圆并在上面写一些东西("basically a single letter on every circle")代码如下

    var svgcontainer = d3.select("body").append("svg") 
                                    .attr("width",width)
                                    .attr("height",height);
d3.json("real.json",function(json){

    var elem = svgcontainer.selectAll("div")
                  .data(json.residues);

    var elemEnter = elem.enter()
        .append("g");

    var circle = elemEnter.append("circle")
                          .attr("cx",50)
                          .attr("cy",50)
                          .attr("r",10)
                          .style("fill","red");

    elemEnter.append("text")
             .attr("dx",-20)
             .text(function(d){return d.name});

 }) ;

代码正在绘制圆圈但没有在圆圈上写任何字母。 json 示例文件如下

{
"residues":[
    {"name":"A","mut":[
         {"what":"A1H","type":"non-neutral"}
    ]},    
    {"name":"H"}
]}

请帮我修改代码,画一个圆圈,然后在上面写一个字母。

 var svgcontainer = d3.select("body").append("svg") 
                                    .attr("width", 200)
                                    .attr("height",200);
//d3.json("real.json",function(json){
var json = {
"residues":[
    {"name":"A","mut":[
         {"what":"A1H","type":"non-neutral"}
    ],"cx": 50,"cy":50, "r":20},    
    {"name":"H","cx": 90,"cy":80, "r":20}
]};

    var elem = svgcontainer.selectAll("div")
                  .data(json.residues);

    var elemEnter = elem.enter()
        .append("g");

    var circle = elemEnter.append("circle")
                          .attr("cx",function(d){ return d.cx;})
                          .attr("cy",function(d){ return d.cy;})
                          .attr("r",function(d){ return d.r;})
                          .style("fill","red");

    elemEnter.append("text")
             .attr("dy", function(d){
      return d.cy+5;
    }).attr("dx",function(d){ return d.cx-5;})
             .text(function(d){return d.name});

 //}) ;
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

var circle = elemEnter.append("circle")
                          .attr("cx",50)
                          .attr("cy",50)
                          .attr("r",10)
                          .style("fill","red");

不要使用静态值来设置圆的cx、cy、r值,使用静态值会将所有的圆都设置在一个位置,我们看不到所有的圆,只有圆是可见的。

elemEnter.append("text")
         .attr("dx",-20)
         .text(function(d){return d.name});

这里我们也把文字的dx值设置为-20,负值会将元素带出svg,所以我们看不到文字,尝试根据圆圈设置文字的dx和dy值cx 和 cy 值这会将两者设置在一起。

我做了所有的改变, 希望你明白了。 不行再问我。