zoukankan      html  css  js  c++  java
  • histogram布局用法

    1histogram布局

    histogram布局,频率分布直方图,字面意思很明了,表明了一个范围内分布的频率,其中每个柱型表明了这个范围内个数。

    //随机生成正态分布数据
    var random=d3.random.normal(170,10);//均值和方差
    
    var dataset=[]
    for (var i=0;i<100;i++){
        dataset.push(random());
    }
    console.log(dataset);
    //定义histgram布局
    var histogram=d3.layout.histogram()
                            .range([30,200])
                            .bins(20)
                            .frequency(true);
    var histdata=histogram(dataset);

    用布局对象包裹数据,会生成我们想要的数据其实所有的布局都是用来包裹数据,生成特定所需要的数据,然后我们从这些数据中抽取我们所需要的数据,用路径,或者rect,circle等基本图形
    这里写图片描述
    控制台可以看出,三个字段,x,y,dx

    2.生成x,y轴

    //我们抽取x来生成x轴的输入域
    //map是array的一个方法循环histdata中的d.x,返回一个新的d.x数组
    var ticks=histdata.map(function(d){return d.x});
    
    var xscale=d3.scale.ordinal()
                      .domain(ticks)
                      .rangeRoundBands([padding,width-padding],0.1);
    console.log(ticks)
    var xaxis=d3.svg.axis()
                .scale(xscale)
                .orient("buttom")
                .tickFormat(d3.format(".0f"));
    
    svg.append("g")
        .attr("class","axis")
        .attr("transform","translate("+0+","+(height-padding)+")")
        .call(xaxis);
    
    
    /*y轴*/  
    //d3找最小值,最大值方法
    var min=d3.min(histdata,function(d){return d.y});
    var max=d3.max(histdata,function(d){return d.y});
    
    var yscale=d3.scale.linear()
                        .domain([min,max])
                        .range([height-padding,padding]);
    
    var yaxis=d3.svg.axis()
                    .scale(yscale)
                    .orient("left")
                    .tickFormat(d3.format(".0f"));
    
    svg.append("g")
        .attr("class","axis")
        .attr("transform","translate("+padding+",0)")
        .call(yaxis);

    我们抽出来的tick数据
    这里写图片描述

    3.画出柱状图

    /*将g从右上角移动*/
    var rects=svg.append("g")
        .attr("transform","translate(0,-40)")//-40的意思是从svg的下边移动
    
    rects.selectAll("rect")
        .data(histdata)
        .enter()
        .append("rect")
        .attr("class","rects")
        .attr("x",function(d,i){
            return xscale(d.x);
        })
        .attr("y",function(d,i){
            return yscale(d.y);
        })
        .attr("width",function(d,i){
            return xscale.rangeBand();
        })
        .attr("height",function(d,i){
            return height-yscale(d.y);
        })

    这里写图片描述

  • 相关阅读:
    IntelliJ IDEA 14.03 java 中文文本处理中的编码格式设置
    应聘感悟
    STL string分析
    CUDA SDK VolumeRender 分析 (1)
    BSP
    CUDA SDK VolumeRender 分析 (3)
    CUDA SDK VolumeRender 分析 (2)
    Windows软件发布时遇到的一些问题
    Ten Commandments of Egoless Programming (转载)
    复习下光照知识
  • 原文地址:https://www.cnblogs.com/caojunjie/p/8318882.html
Copyright © 2011-2022 走看看