• 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);
        })

    这里写图片描述

  • 相关阅读:
    尽解powershell的workflow
    powershell玩转iis网站服务器
    Windows Terminal (Preview)治好了cmd,powershell的癌症
    博客园“NET Core 版博客系统”的运维浅见
    此贴告诉你:为啥shell脚本人,不建议学python
    关于revit的外部扩展存储
    Revit二次开发 屏蔽复制构件产生的重复类型提示窗
    xpath测试工具 xpath调试工具
    c# 防止重复运行 弹出已运行窗口并传递消息
    .NET APlayer播放器 demo
  • 原文地址:https://www.cnblogs.com/caojunjie/p/8318882.html
Copyright © 2020-2023  润新知