先上效果图:

图中柱状图变成纯蓝色是鼠标滑动过的颜色(颜色可改,本人配色能力十分的强,建议直接用默认设置即可 ( ᖛ ̫ ᖛ )ʃ))

1、环境说明

Vue版本:"vue": "^2.5.2"

d3版本:"d3": "^5.9.1"

2、Histogram.vue源码

 <!--
d3组件:柱状图
属性说明:
id:必填,如果同一页面引用多个柱状图,请设置不同的id
width:选填,默认600
height:选填,默认600
begincolor:选填,柱状图渐变色的起始颜色,默认绿色
endcolor:选填,柱状图渐变色的结束颜色,默认蓝色
selectcolor:选填,鼠标滑过柱状图时显示的颜色,默认蓝色
dataset:必填,数据
数据格式:
[
{'name': '北京', value: },
{'name': '厦门', value: },
{'name': '大兴安岭', value: },
{'name': '苏州', value: }
]
rotate:选填,当x轴文字过长,可设置此值为true让文字旋转,默认不旋转
onRectClick: 选填,点击柱状图的自定义事件
--> <template>
<div class="histogram" :id="id">
</div>
</template> <script>
import * as d3 from 'd3'
function noop(d, i) {
// console.log(d)
// console.log(i)
}
export default {
name: 'histogram',
props: {
id: String,
width: Number,
height: Number,
begincolor: String,
endcolor: String,
selectcolor: String,
dataset: Array,
rotate: Boolean,
onRectClick: {
type: Function,
default: noop
}
},
mounted () {
this.init();
},
methods: {
init() {
d3.select("#svg" + this.id).remove();
let width = this.width ? this.width : ;
let height = this.height ? this.height : ;
let svg = d3.select("#" + this.id).append("svg").attr("width", width).attr("height", height).attr("id", "svg" + this.id);
let begincolor = this.begincolor ? this.begincolor : 'steelblue';
let endcolor = this.endcolor ? this.endcolor : 'green';
let selectcolor = this.selectcolor ? this.selectcolor : 'steelblue';
let linecolorid = 'linecolor' + this.id;
let linearGradient = svg.append('defs').append('linearGradient').attr('id', linecolorid)
.attr('x1', '0%').attr('y1', '0%').attr('x2', '0%').attr('y2', '100%')
linearGradient.append('stop').attr('offset', '0%').attr('style', 'stop-color:' + begincolor + '; stop-opacity:1')
linearGradient.append('stop').attr('offset', '100%').attr('style', 'stop-color:' + endcolor + '; stop-opacity:1')
let gwidth = width - ;
let gheight = height - ;
let values = this.dataset.map(d => d.value)
let xScale1 = d3.scaleBand().range([, gwidth]).domain(this.dataset.map(d => d.name))
let yScale1 = d3.scaleLinear().domain([, d3.max(values)]).range([gheight, ]);
let xAxis = d3.axisBottom().scale(xScale1);
let yAxis = d3.axisLeft().scale(yScale1);
let xScale = d3.scaleBand()
.domain(d3.range(this.dataset.length))
.rangeRound([, gwidth])
.round(0.05);
let yScale = d3.scaleLinear()
.domain([, d3.max(values)])
.range([, gheight]);
svg.selectAll("rect")
.data(values)
.enter()
.append("rect")
.attr("x", (d, i) => + xScale(i))
.attr("width", xScale.bandwidth() - )
.attr("y", + gheight)
.attr("height", )
.attr("fill", "red")
.on("click", this.onRectClick)
// .on("click", function(d, i) {
// d3.select(this)
// .transition()
// .duration(1000)
// .ease(d3.easeBounce)
// .attr("fill", "green");
// })
.on("mouseover", function(d, i) {
d3.select(this)
// .transition(d)
// .duration(200)
// .ease(d3.easeBounce)
.attr("fill", selectcolor);
})
.on("mouseout", function(d, i) {
d3.select(this)
// .transition(d)
// .duration(200)
// .ease(d3.easeBounce)
.attr("fill", "url(#" + linecolorid + ")");
})
.transition()
.duration()
.ease(d3.easeBounce)
.delay((d, i) => i * )
.attr("y", (d) => + gheight - yScale(d))
.attr("height", yScale)
.attr("fill", "url(#" + linecolorid + ")"); svg.selectAll("text")
.data(values)
.enter()
.append("text")
.attr("x", (d, i) => + xScale(i))
.attr("y", d => + gheight - yScale(d))
.attr("dx", xScale.bandwidth() / )
.attr("dy", )
.attr("text-anchor", "begin")
.attr("font-size", () => {
if (width > ) return ;
else return ;
})
.attr("fill", "white")
.transition()
.delay()
.text(d => d); let xvalues = svg.append("g")
.attr("transform", "translate(60, " + (gheight + ) + ")")
.call(xAxis) if (this.rotate) {
xvalues.selectAll('text')
.attr("dx", -)
.attr("dy", )
.attr("transform", "rotate(-30)")
} svg.append("g")
.attr("transform", "translate(60, 50)")
.call(yAxis); // if (this.width && this.height) {
// svg.attr("width", this.width)
// .attr("height", this.height)
// .attr("viewBox", "0 0 600 600");
// }
}
},
watch: {
dataset() {
this.init();
}
}
}
</script> <style> </style>

3、api说明

   d3组件:柱状图
属性说明:
id:必填,如果同一页面引用多个柱状图,请设置不同的id
width:选填,默认600
height:选填,默认600
begincolor:选填,柱状图渐变色的起始颜色,默认绿色
endcolor:选填,柱状图渐变色的结束颜色,默认蓝色
selectcolor:选填,鼠标滑过柱状图时显示的颜色,默认蓝色
dataset:必填,数据
数据格式:
[
{'name': '北京', value: },
{'name': '厦门', value: },
{'name': '大兴安岭', value: },
{'name': '苏州', value: }
]
rotate:选填,当x轴文字过长,可设置此值为true让文字旋转,默认不旋转
onRectClick: 选填,点击柱状图的自定义事件

4、使用示例

 <template>
<div id="test">
<histogram id="histogram" :dataset="data" :onRectClick="test"></histogram>
</div>
</template> <script>
import histogram from '@/components/d3/Histogram'
export default {
name: 'test',
data() {
return {
data: [
{'name': '北京', value: },
{'name': '厦门', value: },
{'name': '大兴安岭', value: },
{'name': '苏州', value: }
]
}
},
components: {
histogram
},
methods: {
test(d, i) {
this.$alert(d, i, {
confirmButtonText: '确定',
callback: action => {
this.$message({
type: 'info',
message: `action: ${ action }`
});
}
});
}
}
}
</script> <style scoped>
</style>

Vue整合d3.v5.js制作--柱状图(rect)的更多相关文章

  1. Vue整合d3.v5.js制作--折线图(line)

    先上效果图(x轴固定为时间轴): 图中出现的悬浮框是鼠标悬停效果 1.环境说明: vue版本:"vue": "^2.5.2" d3版本:"d3&quo ...

  2. D3.js 制作中国地图 .net 公共基础类

    D3.js 制作中国地图 from:  http://d3.decembercafe.org/pages/map/index.html GeoJSON is a format for encoding ...

  3. d3.js 制作简单的俄罗斯方块

    d3.js是一个不错的可视化框架,同时对于操作dom也是十分方便的.今天我们使用d3.js配合es6的类来制作一个童年小游戏--俄罗斯方块.话不多说先上图片. 1. js tetris类 由于方法拆分 ...

  4. d3.js 制作简单的贪吃蛇

    d3.js是一个不错的可视化框架,同时对于操作dom也是十分方便的.今天我们使用d3.js配合es6的类来制作一个童年小游戏–贪吃蛇.话不多说先上图片. 1. js snaker类 class Sna ...

  5. 使用Vue.js制作仿Metronic高级表格(一)静态设计

    Metronic高级表格是Metonic框架中自行实现的表格,其底层是Datatables.本教程将主要使用Vue实现交互部分,使用Bootstrap做样式库.jQuery做部分用户交互(弹窗). 使 ...

  6. 使用d3.v5实现条形图

    效果图: 条形图: 目录结构: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  7. 使用d3.v5实现饼状图

    效果图: 饼状图: 目录结构: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  8. 使用d3.v5实现折线图与面积图

    d3最新是V5版的,比起V2的API变动了不少,写下我实现过程 效果图: 面积图: 折线图: 目录结构: <!DOCTYPE html> <html lang="en&qu ...

  9. vue整合adminLTE

    前端框架AdminLTE 中文教程 如何用vue整合adminlte模板 1.adminlte 下载地址 : https://github.com/almasaeed2010/AdminLTE/rel ...

随机推荐

  1. CTRL-IKun团队选题报告

    1. 团队简介 1.1团队名称:CTRL-IKun 1.2队员学号列表 姓名 学号列表 廖志丹 201731032125 王川 201731021132 江天宇 201731024132 张微玖 20 ...

  2. 创建dynamics CRM client-side (九) - 用JS来获取look up 信息

    我们用以下的代码可以获取到look up 的信息. 大家可以查看微软文档来查看更多关于 lookup object的信息 https://docs.microsoft.com/en-us/powera ...

  3. Kafka动态配置实现原理解析

    问题导读 Apache Kafka在全球各个领域各大公司获得广泛使用,得益于它强大的功能和不断完善的生态.其中Kafka动态配置是一个比较高频好用的功能,下面我们就来一探究竟. 动态配置是如何设计的? ...

  4. 【WPF学习】第三十三章 高级命令

    前面两章介绍了命令的基本内容,可考虑一些更复杂的实现了.接下来介绍如何使用自己的命令,根据目标以不同方式处理相同的命令以及使用命令参数,还将讨论如何支持基本的撤销特性. 一.自定义命令 在5个命令类( ...

  5. Nginx(3)---代理与负载均衡

    一.代理简述 代理分为正向代理和反向代理, 正向代理:客户端与目标服务器之间增加一个代理服务器,客户端直接访问代理服务器,在由代理服务器访问目标服务器并返回客户端并返回 .比如夜深人静的时候访问的一些 ...

  6. cloud-init使用技巧

    对于 Linux 镜像,cloud-init 负责 instance 的初始化工作.cloud-init 功能很强大,能做很多事情,而且我们可以通过修改配置文件灵活定制 cloud-init. clo ...

  7. 手把手实操教程!使用k3s运行轻量级VM

    前 言 k3s作为轻量级的Kubernetes发行版,运行容器是基本功能.VM的管理原本是IaaS平台的基本能力,随着Kubernetes的不断发展,VM也可以纳入其管理体系.结合Container和 ...

  8. 部署 harbor 私有仓库

    安装下载依赖包 安装docker-compose 从 docker compose 发布页面下载最新的 docker-compose 二进制文件,本文以1.25.4为例 cd /opt/k8s/wor ...

  9. 🔥SpringBoot图文教程2—日志的使用「logback」「log4j」

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...

  10. HTML5与HTML4的区别-----文档结构

    HTML5在结构和语法上做了大量的简化.当然,也提供了语义化的标签 结构上区别: 1.简化了文档声明语句     HTML5仅规定了一种:       <!DOCTYPE html> 2. ...