创建一个容器

let svg = d3.select("body").append("svg") //在body中添加一个svg容器

.attr("height", height) //设置宽高

.attr("width", width);

let tooltip=d3.select("body") //添加一个div,主要用来显示数据提示

.append("div")

.attr("class","tooltip") //添加一个类名,方便设置样式

.style("opacity",0.0); //设置透明度为0

创建坐标轴

function draw(data) {……}//我们所有绘制图标的代码均放在draw函数里

let xScale = d3.scale.ordinal() //创建一个序数尺度

.domain(d3.range(data.length)) //定义域

.rangeRoundBands([0, xAxisWidth], 0.2);//设置padding为0.2,设置每个rangeBand的留白长度

let yScale = d3.scale.linear() //创建一个线性尺度

.domain([0, d3.max(data)]) //值域

.range([0, yAxisWidth]);

let xAxis = d3.svg.axis() //创建x坐标

.scale(xScale) //设定xSacle尺度

.orient("bottom") //坐标位置在底部

yScale.range([yAxisWidth, 0]);

let yAxis = d3.svg.axis()

.scale(yScale)

.orient("left");

svg.append("g") //在容器中添加一个g容器,将x坐标的相关体全部扔进去

.attr("class", "axis x-axis") //设置类名

.attr("transform", "translate(" + padding.left + "," + (height - padding.bottom) + ")") //移动到合适的位置

.call(xAxis) //和xAxis绑定上

svg.append("g") //y轴和x轴类似

.attr("class", "axis y-axis")

.attr("transform", "translate(" + padding.left + "," + (height - yAxisWidth - padding.top) + ")")

.call(yAxis)

创建网格线

d3.selectAll("g.x-axis g.tick") //选择到刻度线

.append("line") //添加line,其实这也是网格线的原理

.classed("grid-line", true)

.attr("x1", 0)

.attr("y1", 0)

.attr("x2", 0)

.attr("y2", - (xAxisWidth));

d3.selectAll("g.y-axis g.tick")

.append("line")

.classed("grid-line", true)

.attr("x1", 0)

.attr("y1", 0)

.attr("x2", yAxisWidth)

.attr("y2", 0);

创建柱状图

let updateRect = svg.selectAll("rect") //更新模式

.data(data);

let enterRect = updateRect.enter(); //进入模式

let exitRect = updateRect.exit(); //退出模式

enterRect.append("rect")

.attr("fill", "lightseagreen") //填充颜色

.attr("x", function (d, i) { //确定rect的位置,宽度,高度,跟scale绑定动态变化

return padding.left + xScale(i)

})

.attr("y", function (d) {

return height - padding.bottom - yScale(d)

})

.attr("width", xScale.rangeBand()) //宽度

.attr("height", function (d) {

return yScale(d)

})

.on("mousemove" ,function (d,i) {//绑定鼠标事件,d:数据,i:索引

d3.select(this) //this当前对象

.transition() //动画

.duration(100) //持续事件

.attr("fill","green"); //变色

tooltip.html(d) //为数据提示框添加对象对应的数据

.style("left",(d3.event.pageX)+"px")//确定数据提示框

.style("top",(d3.event.pageY -20)+"px")

.style("opacity",.5)

})

.on("mouseout",function (d,i) {

d3.select(this)

.transition()

.duration(100)

.attr('fill','lightseagreen');

tooltip.style("opacity",0.0)

});

updateRect.attr("fill", "lightseagreen")

.attr("x", function (d, i) {

return padding.left + xScale(i)

})

.attr("y", function (d) {

return height - padding.bottom - yScale(d)

})

.attr("width", xScale.rangeBand())

.attr("height", function (d) {

return yScale(d)

});

exitRect.remove();

注意

svg.selectAll('*').remove();//在draw函数添加这行代码,在刷新时候移除svg,否则会覆盖

d3中文案例_D3.js柱状图例子相关推荐

  1. d3中文案例_D3.js实现动态仪表盘案列

    这次给大家带来D3.js实现动态仪表盘案列,D3.js实现动态仪表盘的注意事项有哪些,下面就是实战案例,一起来看一下. 本文介绍了D3.js实现简洁实用的动态仪表盘的示例,分享给大家,具体如下: 动态 ...

  2. d3中文案例_D3+svg 案例

    //domain():设置尺度的输入范围,参数以数组的形式传入. //range() :输出范围的设置 var padding =30; var xScale = d3.scale.linear(). ...

  3. d3中文案例_D3js初探及数据可视化案例设计实战

    摘要:本文以本人目前所做项目为基础,从设计的角度探讨数据可视化的设计的方法.过程和结果,起抛砖引玉之效.在技术方案上,我们采用通用web架构和d3js作为主要技术手段:考虑到项目需求,这里所做的可视化 ...

  4. d3 几种常用的柱状图

    本文参照了echarts罗列了几种常用的柱状图在d3中的画法 基本柱状图 使用d3直方图布局 d3的所有布局都不会帮你作图,只是帮你按需处理的数据. 使用d3.randomBates构造一组1000个 ...

  5. php正则换成js正则,php正则替换_php使用正则替换过滤掉js脚本例子

    摘要 腾兴网为您分享:php使用正则替换过滤掉js脚本例子,榛果民宿,掌上书院,夜读小说,学堂里等软件知识,以及中辉期货,车易行违章,孢子,必应壁纸app,鲁证期货,dota26.88,ip摄像头ap ...

  6. d3力导向图增加节点_d3.js力导向图节点如何都显示在边框内

    最近用到d3.js中的force力导向图,想实现效果如下,所有城市节点都在可视范围内,如果超出有滚动条也可以. 遇到的问题是,当节点一多,有的节点就会跑到外面去,这边是通过加大charge相互作用力, ...

  7. d3 svg path添加文本_D3.js 力导向图的显示优化

    D3.js 作为一个前端,说到可视化除了听过 D3.js 的大名,常见的可视化库还有 ECharts.Chart.js,这两个库功能也很强大,但是有一个共同特点是封装层次高,留给开发者可设计和控制的部 ...

  8. d3力导向图增加节点_D3.js+Es6+webpack构建人物关系图(力导向图),动态更新数据,点击增加节点,拖拽增加连线......

    Java学习手记2--多线程 一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视 ...

  9. js remove 当前元素_D3.js入门教程

    作者:karen 转发链接:https://mp.weixin.qq.com/s/TFpywiD6PY7HMlKIpQwDFQ WHAT D3.js是一个JavaScript库操纵文档基于数据.D3帮 ...

最新文章

  1. lua中的魔法字符转义问题
  2. java: String的==与equals
  3. 中怎么构建ebug模式_自动挡中的“手自一体”,该怎么用?多少人把手动模式当成摆设?...
  4. 深度学习pytorch--多层感知机(三)
  5. 电脑上我的文档图标不见了怎么办
  6. 如何进行云主机带宽测试
  7. element提交图片限制一张_科研SCI论文图片常见问题和错误汇总
  8. excel统计行数_百万到亿级数据,快速统计查询
  9. 分布式链路追踪工具skywalking 介绍
  10. 使用yaml文件创建deployment来部署一个应用程序到k8s集群
  11. 鸿蒙冰心有其他途径得到吗,关索除了人遁礼包,还有其他途径能获得吗?
  12. 人人都是 DBA(IV)SQL Server 内存管理 (转)
  13. JDK9的32位版本下载
  14. PDF查看器之pdfvuer
  15. 2015 iMac如何绕过TMP安装Windows11(不用Parallels虚拟机实现macOS与Windows11双系统)
  16. 写给自己过去的一封信:成功=好习惯+自控力
  17. mac 给 iPhone 充电一直闪跳
  18. 【服务器数据恢复】服务器断电导致RAID报错的数据恢复案例
  19. 《SRE生存指南》金句分享
  20. 彼德原理(劳伦斯·彼德)

热门文章

  1. windows(64位)下使用curl命令
  2. 让就医流程更智能 道一循推医院官方APP
  3. 输入输出,数据类型,运算符
  4. solaris 常用软件安装
  5. 超级简单:一步一步教你创建一小型的asp.net mvc 应用程序
  6. 2007注册会计师考试
  7. Go语言入门指南,带你轻松学Go
  8. 常见数据结构的 Python 实现(建议收藏)
  9. docker自定义端口挂载目录
  10. Redis添加从节点