• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > 可视化工具--D3--案例分析--Histogram Chart

可视化工具--D3--案例分析--Histogram Chart

作者:可视化大猩猩 字体:[增加 减小] 来源:互联网 时间:2017-08-19

可视化大猩猩通过本文主要向大家介绍了可视化工具,d3-js等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

链接分别为Histogram:[ https://bl.ocks.org/mbostock/3048450]
和Histogram using pareto distribution:[ http://bl.ocks.org/curran/11301130 ]

 

Histogram:

/*随机生成数据*/
var data = d3.range(1000)
             .map(d3.randomBates(10));
/*格式化数据(用于lable文字)*/
var formatCount = d3.format(",.0f");
/*生成画布与属性*/
var svg = d3.select("svg"),
    margin = {top: 10, right: 30, bottom: 30, left: 30},
    width = +svg.attr("width") - margin.left - margin.right,
    height = +svg.attr("height") - margin.top - margin.bottom,
    g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
/*定义横坐标比例尺*/
var x = d3.scaleLinear()
          .rangeRound([0, width]);
/*生成直方图布局*/
var bins = d3.histogram()
             .domain(x.domain())
             .thresholds(x.ticks(20))
             (data);
/*纵轴比例尺*/
var y = d3.scaleLinear()
          .domain([0, d3.max(bins, function(d) { return d.length; })])
          .range([height, 0]);
/*绑定bar数据*/
var bar = g.selectAll(".bar")
           .data(bins)
           .enter().append("g")
           .attr("class", "bar")
           .attr("transform", function(d) { return "translate(" + x(d.x0) + "," + y(d.length) + ")"; });
/*添加bar*/
bar.append("rect")
   .attr("x", 1)
   .attr("width", x(bins[0].x1) - x(bins[0].x0) - 1)
   .attr("height", function(d) { return height - y(d.length); });
/*添加bar上文字*/
bar.append("text")
   .attr("dy", ".75em")
   .attr("y", 6)
   .attr("x", (x(bins[0].x1) - x(bins[0].x0)) / 2)
   .attr("text-anchor", "middle")
   .text(function(d) { return formatCount(d.length); });
/*添加坐标轴*/
g.append("g")
 .attr("class", "axis axis--x")
 .attr("transform", "translate(0," + height + ")")
 .call(d3.axisBottom(x));

这是一个最简单的直方图布局,没有设置额外规则,这一个案例使用的d3.v3。

Histogram using pareto distribution:

/*定义pareto规则*/
function pareto(alpha){
    return function(){
        return 1 / Math.pow(Math.random(), 1 / alpha);
    };
}
/*格式化数据*/
var formatCount = d3.format(",.0f");
/*定义画布属性*/
var margin = {top: 10, right: 30, bottom: 30, left: 30},
    width = 960 - margin.left - margin.right,
    height = 500 - margin.top - margin.bottom;
/*定义x轴比例尺*/
var x = d3.scale.linear()
          .domain([0, 5])
          .range([0, width]);
/*用Pareto distribution生成一组随机值*/
var values = d3.range(1000).map(pareto(1)).filter(function(d){
                 /*删除域之外的值*/
                 return d <= x.domain()[1];
             });
/*生成直方图(20个块)*/
var data = d3.layout.histogram()
             .bins(x.ticks(20))
             (values);
/*定义y轴比例尺*/
var y = d3.scale.linear()
          .domain([0, d3.max(data, function(d) { return d.y; })])
          .range([height, 0]);
/*定义坐标轴(x)*/
var xAxis = d3.svg.axis()
              .scale(x)
              .orient("bottom");
/*添加画布*/
var svg = d3.select("body").append("svg")
            .attr("width", width + margin.left + margin.right)
            .attr("height", height + margin.top + margin.bottom)
            .append("g")
            .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
/*定义bar与绑定数据*/
var bar = svg.selectAll(".bar")
             .data(data)
             .enter().append("g")
             .attr("class", "bar")
             .attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; });
/*添加bar*/
bar.append("rect")
   .attr("x", 1)
   .attr("width", x(data[0].dx) - 1)
   .attr("height", function(d) { return height - y(d.y); });
/*添加文字标签*/
bar.append("text")
   .attr("dy", ".75em")
   .attr("y", 6)
   .attr("x", x(data[0].dx) / 2)
   .attr("text-anchor", "middle")
   .text(function(d) { return formatCount(d.y); });
/*添加坐标轴(x)*/
svg.append("g")
   .attr("class", "x axis")
   .attr("transform", "translate(0," + height + ")")
   .call(xAxis);

这一个案例使用的是d3.v3,博主习惯使用v3版本,想改成v4的,不过感觉两个版本对比写一下可能会更好。同时这个案例使用了Pareto规则来生成数据,显示了不同规则下的直方图分布。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
  • 可视化工具--D3--案例分析--Histogram Chart

相关文章

  • 2017-05-11微信小程序遇到修改数据后页面不渲染的问题解决
  • 2017-05-11javascript判断元素存在和判断元素存在于实时的dom中的方法
  • 2017-05-11JavaScript利用Date实现简单的倒计时实例
  • 2017-05-11Angularjs处理页面闪烁的解决方法
  • 2017-08-24Ext常用知识点积累--textfield,store,grid
  • 2017-05-11nodejs根据ip数组在百度地图中进行定位
  • 2017-05-11input输入密码变黑点密文的实现方法
  • 2017-05-11SyntaxHighlighter自动识别并加载脚本语言 原创
  • 2017-05-11从零学习node.js之express入门(六)
  • 2017-05-11微信小程序 Toast自定义实例详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • nodejs中向HTTP响应传送进程的输出
    • JS实现DIV高度自适应窗口示例
    • 利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
    • 微信小程序 Button 组件详解及简单实例
    • js实现颜色阶梯渐变效果(Gradient算法)
    • js css自定义分页效果
    • Jil,高效的json序列化和反序列化库
    • 微信小程序开发(二)图片上传+服务端接收详解
    • 微信小程序实战之自定义抽屉菜单(7)
    • jQuery基于事件控制实现点击显示内容下拉效果

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有