利用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 相关文章推荐
Dom 结点创建 基础知识
Oct 01 Javascript
用javascript判断IE版本号简单实用且向后兼容
Sep 11 Javascript
javascript框架设计之种子模块
Jun 23 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
Sep 14 Javascript
vue.js 表格分页ajax 异步加载数据
Oct 18 Javascript
json数据处理及数据绑定
Jan 25 Javascript
JS实现点击循环切换显示内容的方法
Oct 19 Javascript
vue页面切换到滚动页面显示顶部的实例
Mar 13 Javascript
js中apply和Math.max()函数的问题及区别介绍
Mar 27 Javascript
js实现web调用摄像头 js截取视频画面
Apr 21 Javascript
js实现随机点名器精简版
Jun 29 Javascript
Jquery $.map使用方法实例详解
Sep 01 jQuery
适用于手机端的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
mysql+php分页类(已测)
2008/03/31 PHP
PHP session有效期问题
2009/04/26 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
js实现各浏览器全屏代码实例
2018/07/03 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
express 项目分层实践详解
2018/12/10 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
python 如何停止一个死循环的线程
2020/11/24 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
优秀团员个人事迹材料
2014/01/29 职场文书
亮化工程实施方案
2014/03/17 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书