d3之简单柱状图

柱状图其实是很简单,就是矩形和线的组合,在这里为操作方便我们一般会添加g组。g标签没有任何别的作用,只是把它的所有children聚到一起而已。下面是800宽,600高的svg上添加了一个柱图的g组。

效果图:


p1.png

代码如下,需要注意的是,g组的transform不会影响坐标的改变。
还有y需要特别注意下,跟数学上的y从下到上不一样,svg的0点在最上方。

<script>
        var dataset=[100,50,80,200];

        var _svg = d3.select("body")
                .append("svg")
                .attr("width","800")
                .attr("height","600")
                .style("background","lightgrey");

        var _g=_svg.append("g");//添加g组

        _g.attr("transform","translate(50,120)");
        
        var barWidth = 20, barPadding = 30;
        var x2 = barPadding * ( dataset.length + 1 ) + barWidth * dataset.length;

        _g.append("line")
                .attr("x1",0)
                .attr("y1","180")
                .attr("x2",x2)
                .attr("y2","180")
                .attr("stroke","steelblue");
        
        _g.selectAll("rect")
                .data(dataset)
                .enter()
                .append("rect")
                .attr("x",function(d,i){
                    //20为柱子宽度,30为柱子之间的间距
                    return barPadding + barWidth * i + barPadding * i;
                })
                .attr("y",function(d,i){
                    //d为柱子的高度,180为x轴的y值 
                    return 180 - d;
                })
                .attr("height",function(d){return d})
                .attr("width","20")
                .style("fill","steelblue");

        _g.selectAll("text")
                .data(dataset)
                .enter()
                .append("text")
                .attr("x",function(d,i){
                    return 30+20*i+30*i;
                })
                .attr("y",function(d){
                    return 160-d;
                })
                .text(function(d){return d})
                .attr("text-anchor","middle")
                .attr("fill","darkblue");
    </script>

这里用的是数组里的真实的数据作为坐标算的,如果数据特别大的话就得用到比例尺了~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Data Visualization with D3 D3: SVG中的jQurey 1. Add Documen...
    王策北阅读 798评论 0 2
  • 近期在做线路图实时刷新的功能,用到的技术主要有d3、svg、websocket。整体思路就是解析线路图json,使...
    淼一___阅读 1,120评论 0 1
  • @(HTML5)[canvas与SVG] [TOC] 十一 、SVG HTML体系中,最常用的绘制矢量图的技术是S...
    踏浪free阅读 4,642评论 0 2
  • 第一章 HTML5 (2014年10月29日发布)新特性: 10个 (1)新的语义标签 (2)增强型表单 (3)视...
    fastwe阅读 986评论 0 1
  • d3 (核心部分)选择集d3.select - 从当前文档中选择一系列元素。d3.selectAll - 从当前文...
    谢大见阅读 3,516评论 1 4