利用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 相关文章推荐
用脚本调用样式的几种方法
Dec 09 Javascript
jQuery checkbox全选/取消全选实现代码
Nov 14 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
Apr 12 Javascript
javascript操作字符串的原生方法
Dec 22 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
Aug 12 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
Sep 24 Javascript
轻松实现js选项卡切换效果
Sep 24 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
May 11 Javascript
JQuery Ajax 异步操作之动态添加节点功能
May 24 jQuery
如何抽象一个Vue公共组件
Oct 17 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
May 03 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
Aug 13 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
无数据库的详细域名查询程序PHP版(3)
2006/10/09 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
javascript验证身份证号
2015/03/03 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
jQuery实现简单弹窗遮罩效果
2017/02/27 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
python实现的简单文本类游戏实例
2015/04/28 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
使用python绘制常用的图表
2016/08/27 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
企业总经理职责
2014/02/02 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
项目合作意向书
2015/05/08 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python