利用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 相关文章推荐
prototype 1.5 & scriptaculous 1.6.1 学习笔记
Sep 07 Javascript
jQuery 使用手册(一)
Sep 23 Javascript
js页面跳转的常用方法整理
Oct 18 Javascript
面向对象设计模式的核心法则
Nov 10 Javascript
从零学jquery之如何使用回调函数
May 16 Javascript
JavaScript原生对象之String对象的属性和方法详解
Mar 13 Javascript
jQuery选择器基础入门教程
May 10 Javascript
JavaScript编码风格指南(中文版)
Aug 26 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
深入理解vue-loader如何使用
Jun 06 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
Jan 19 Javascript
解决Layui 表格自适应高度的问题
Nov 15 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配置文件中最常用四个ini函数
2007/03/19 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
网页布局中CSS样式无效的十个重要原因详解
2017/08/10 HTML / CSS
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
2014元旦晚会策划方案
2014/02/19 职场文书
护林防火标语
2014/06/27 职场文书
端午节活动总结
2014/08/26 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
员工福利申请报告
2015/05/15 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
在js中修改html body的样式
2021/11/11 Javascript