利用D3.js实现最简单的柱状图示例代码


Posted in Javascript onDecember 09, 2016

首先把效果图放出来:

利用D3.js实现最简单的柱状图示例代码

具备了一个柱状图的基础元素:柱形,坐标轴,刻度,数值等。

不得不说,d3.js比直接用的echarts更麻烦,但是确实更自由。

来看看如何实现吧。

//确定画布的大小
var width = 400;
var height = 400;
//在 body 里添加一个 SVG 画布 
var svg = d3.select("body")
  .append("svg")
  .attr("width", width)
  .attr("height", height);
//定义画布周围空白的地方
var padding = {left: 30, right: 30, top: 20, bottom: 20};
//定义一个数组
var dataset = [10, 20, 30, 40, 30, 20, 10, 5];
//x轴的比例尺
var xScale = d3.scale.ordinal()
  .domain(d3.range(dataset.length))
  .rangeRoundBands([0, width - padding.left - padding.right]);
//y轴的比例尺
var yScale = d3.scale.linear()
  .domain([0, d3.max(dataset)])
  .range([height - padding.top - padding.bottom, 0]);
//定义x轴
var xAxis = d3.svg.axis()
  .scale(xScale)
  .orient("bottom");
//定义y轴
var yAxis = d3.svg.axis()
  .scale(yScale)
  .orient("left");
//矩形之间的空白
var rectPadding = 4;
//添加矩形元素
var rects = svg.selectAll(".MyRect")
  .data(dataset)
  .enter()
  .append("rect")
  .attr("class", "MyRect")
  .attr("fill", "steelblue")
  .attr("transform", "translate(" + padding.left + "," + padding.top + ")")
  .attr("x", function (d, i) {
   return xScale(i) + rectPadding / 2;
  })
  .attr("y", function (d) {
   return yScale(d);
  })
  .attr("width", xScale.rangeBand() - rectPadding)
  .attr("height", function (d) {
   return height - padding.top - padding.bottom - yScale(d);
  });
//添加文字元素
var texts = svg.selectAll(".MyText")
  .data(dataset)
  .enter()
  .append("text")
  .attr("class", "MyText")
  .attr("fill", "white")
  .attr("text-anchor", "middle")
  .attr("transform", "translate(" + padding.left + "," + padding.top + ")")
  .attr("x", function (d, i) {
   return xScale(i) + rectPadding / 2;
  })
  .attr("y", function (d) {
   return yScale(d);
  })
  .attr("dx", function () {
   return (xScale.rangeBand() - rectPadding) / 2;
  })
  .attr("dy", function (d) {
   return 20;
  })
  .text(function (d) {
   return d;
  });
//添加x轴
svg.append("g")
  .attr("class", "axis")
  .attr("transform", "translate(" + padding.left + "," + (height - padding.bottom) + ")")
  .call(xAxis);
//添加y轴
svg.append("g")
  .attr("class", "axis")
  .attr("transform", "translate(" + padding.left + "," + padding.top + ")")
  .call(yAxis);

总结

好了,以上就是利用D3.js实现最简单柱状图的例子,怎么样?简单吧?希望本文的内容对刚学习d3.js的朋友们能有所帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
共享自己写一个框架DreamScript
Jan 20 Javascript
js利用与或运算符优先级实现if else条件判断表达式
Apr 15 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
微博@符号的用户名提示效果。(想@到谁?)
Nov 05 Javascript
extjs中grid中嵌入动态combobox的应用
Jan 01 Javascript
jQuery中replaceWith()方法用法实例
Dec 25 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
Mar 31 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
Apr 12 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
Dec 09 Javascript
Angularjs中使用指令绑定点击事件的方法
Mar 30 Javascript
JavaScript数组 几个常用方法总结
Nov 11 Javascript
适用于手机端的jQuery图片滑块动画
Dec 09 #Javascript
Angular.Js的自动化测试详解
Dec 09 #Javascript
浅析javascript中的Event事件
Dec 09 #Javascript
清除js缓存的多种方法总结
Dec 09 #Javascript
Vue.js计算属性computed与watch(5)
Dec 09 #Javascript
JS新包管理工具yarn和npm的对比与使用入门
Dec 09 #Javascript
清除浏览器缓存的几种方法总结(必看)
Dec 09 #Javascript
You might like
图书管理程序(一)
2006/10/09 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python Paramiko模块的安装与使用详解
2016/11/18 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
银行实习的自我鉴定
2013/12/10 职场文书
《颐和园》教学反思
2014/02/26 职场文书
财务主管岗位职责
2014/02/28 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
建设工地安全标语
2014/06/07 职场文书
图书馆标语
2014/06/19 职场文书
新学期开学标语
2014/06/30 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
邓小平理论心得体会
2014/09/09 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
2014年幼师工作总结
2014/11/22 职场文书
2015年话务员工作总结
2015/04/29 职场文书
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技