利用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 相关文章推荐
php上传图片并给图片打上透明水印的代码
Jun 07 Javascript
JavaScript打印iframe内容示例代码
Aug 20 Javascript
JavaScript中的迭代器和生成器详解
Oct 29 Javascript
jquery+php随机生成红包金额数量代码分享
Aug 27 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
Oct 25 Javascript
js判断当前页面用什么浏览器打开的方法
Jan 06 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
Jun 12 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
Jun 15 Javascript
MVVM 双向绑定的实现代码
Jun 21 Javascript
Node登录权限验证token验证实现的方法示例
May 25 Javascript
JS绘图Flot应用图形绘制异常解决方案
Oct 16 Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 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
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python线程中的同步问题及解决方法
2019/08/29 Python
python 串行执行和并行执行实例
2020/04/30 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
python中round函数如何使用
2020/06/19 Python
Python如何测试stdout输出
2020/08/10 Python
应届生妇产科护士求职信
2013/10/27 职场文书
员工薪酬激励方案
2014/06/13 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
交通事故协议书范文
2014/10/23 职场文书
业务员管理制度范本
2015/08/06 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书