首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在d3.js中为每一列绘制矩形

如何在d3.js中为每一列绘制矩形
EN

Stack Overflow用户
提问于 2014-01-16 18:07:53
回答 1查看 659关注 0票数 0

我想在json中为每个属性画4个不同的矩形。所以我需要为每个id画4个矩形。在下面的例子中,id1-4有16个矩形。

矩形的宽度和高度目前是硬编码的。还有x和y轴。

当前,它将每行作为一个矩形。

我有这样的json数据:

代码语言:javascript
复制
[
   [{ "checkins":10},{"builds":11},{"oss":1},{"appsec":10},{"id":1}],
   [{ "checkins":1},{"builds":1},{"oss":21},{"appsec":10},{"id":2}],
   [{ "checkins":11},{"builds":3},{"oss":11},{"appsec":10},{"id":3}],
   [{ "checkins":21},{"builds":20},{"oss":3},{"appsec":30},{"id":4}]
]

我已经写好了代码:

代码语言:javascript
复制
var x_axis = 1;
var y_axis = 45;
var xvar;
var yvar;
var x;
    d3.json("GraphData.json", function(data) 
    {

        var rectangle=                 svggraph.selectAll("rect").data(data).enter().append("rect");
        var RectangleAttrb = rectangle
                           .attr("id", function (d,i) { return "id" + i ; })
                                 .attr("x", function (d,i) 
                                  {
                                xvar=i+1;
                                                if(i==0) return x_axis=0;

                                if ((i > 0) && (xvar%4==1))
                                {
                                            x_axis = 0;

                                }
                                                else
                                {
                                                      x_axis=x_axis+22;
                                }
                                //y=i+1;
                                return x_axis; 
                                           })
                               .attr("y", function (d,i) 
                              { 
                                Yvar=i+1;

                                if ((i > 0) && (Yvar%4==1))
                                {
                                            y_axis = y_axis+ 30;

                                }
                                return y_axis; 
                               })

                       .attr("width",function(d) { return 20; } )
                       .attr("height",function(d) { return 15; })
                       .style("stroke", function (d) { return "black";})
                       .style("fill", function(d) { console.log(d);return "white"; });


    });

它仍然只创建了4个矩形

EN

回答 1

Stack Overflow用户

发布于 2014-01-17 20:09:38

我找到了一个变通解决方案。它创建了一个数组,并循环通过该数组来创建矩形,并指定x和y轴以及高度和宽度。

代码语言:javascript
复制
<html>

<script>


 var x_axis = 1;
    var y_axis = 45;
      var x;
      var rectangle,RectangleAttrb;
      var rect;
      var rectdata;


createtinderboxes();

function createtinderboxes()
{

    //console.log(" the function is called "); 



    d3.json("GraphData.json", function(data) 
    {
        rectdata = data;

            //console.log(rectdata.length);

        for(x=0;x<rectdata.length;x++)
        {


          console.log(rectdata[x]);
          for (index=0;index<5; index++)
          {
            svggraph.append("rect")
                              .attr("x", assignxaxis(rectdata, index)) 
                              .attr("y", assignyaxis(rectdata,yvar))
                              .attr("width", 20)
                              .attr("height", 25)
                              .style("fill","white")    
                              .style("stroke","black");
          }

            yvar = yvar+26;
        }



    });


}

function assignxaxis(rectdata,x)
{

    console.log(rectdata[x]);
    if (x==4) return;

    if(x==0) 
    {
        return x_axis=0
    }
    else
    {
        x_axis=x_axis+22;
    }

    return x_axis; 

}


function assignyaxis(rectdata,y)
{

    return y; 


}

</script>
</html>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21158747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档