利用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 星级评分效果(手写)
Dec 24 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
Mar 24 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
JQuery点击行tr实现checkBox选中的简单实例
May 26 Javascript
Bootstrap前端开发案例二
Jun 17 Javascript
原生js实现查询天气小应用
Dec 09 Javascript
利用Javascript裁剪图片并存储的简单实现
Mar 13 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
Jun 19 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
React router动态加载组件之适配器模式的应用详解
Sep 12 Javascript
JS实现选项卡效果的代码实例
May 20 Javascript
9个JavaScript日常开发小技巧
Oct 06 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 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
小程序云开发之用户注册登录
2019/05/18 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
你应该知道的python列表去重方法
2017/01/17 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
Python字符串格式化输出代码实例
2019/11/22 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
Python调用Redis的示例代码
2020/11/24 Python
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
迟到检讨书800字
2014/01/13 职场文书
五分钟演讲稿
2014/04/30 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
单位授权委托书范本
2014/09/26 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
python3操作redis实现List列表实例
2021/08/04 Python
简单聊聊Golang中defer预计算参数
2022/03/25 Golang