利用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 相关文章推荐
javascript 节点遍历函数
Mar 28 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
Jul 15 Javascript
原生js实现日期联动
Jan 12 Javascript
JavaScript实现带标题的图片轮播特效
May 20 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
Dec 29 Javascript
浅谈JavaScript函数的四种存在形态
Jun 08 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
May 07 Javascript
基于Bootstrap实现城市三级联动
Nov 23 Javascript
了解JavaScript函数中的默认参数
May 30 Javascript
让你30分钟快速掌握vue3教程
Oct 26 Javascript
Vue使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
适用于手机端的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
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
python append、extend与insert的区别
2016/10/13 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
基于Python实现扑克牌面试题
2019/12/11 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
创先争优一句话承诺
2014/05/29 职场文书
工会主席事迹材料
2014/06/03 职场文书
护士节慰问信
2015/02/15 职场文书
反邪教观后感
2015/06/11 职场文书
2016年校长新年寄语
2015/08/17 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
python之json文件转xml文件案例讲解
2021/08/07 Python