vue-d3.js绘制柱状图(含动画和交互)

vue-d3.js绘制柱状图(含动画和交互)

1、安包

npm install sass-loader -D
npm install node-sass -D
cnpm install node-sass -D
cnpm install core-js@2

2、代码
<template>
  <div class="d3Chart"></div>
</template>
<script>
import * as d3 from "d3";
export default {
  mounted() {
    // 数据——x轴的标签——城市
    let labelList = ["成都", "武汉", "上海", "北京", "深圳"];
    // 数据——对应y轴的值——城市人口(万)
    let dataList = [100, 105, 200, 250, 230];
    // 画布的参数
    let mapWidth = 300;
    let mapHeight = 300;
    let mapPadding = 30;
    // 定义画布—— 宽 300 高 300 外边距 10px
    let map = d3
      .select(".d3Chart")
      .append("svg")
      .attr("width", mapWidth)
      .attr("height", mapHeight)
      .style("margin", "10px");
    // d3.select("div").remove()
    //定义x轴比例尺(序数段比例尺)
    let scaleX = d3
      .scaleBand()
      .domain(labelList)
      .range([0, mapWidth - mapPadding * 2]);
    // .paddingInner(0.2) // 段间距
    // .paddingOuter(0.5) //外边距
    // .align(0.5) //段对齐
    // .round(true);  //取整
    //定义Y轴比例尺(线性比例尺)——最大值为画布高度-2*画布内边距,最小值为0(0放在第二位,因为y轴正方向是反的)
    let scaleY = d3
      .scaleLinear()
      .domain([0, d3.max(dataList)])
      .range([mapHeight - 2 * mapPadding, 0]);
    //定义x y 轴
    let axisX = d3.axisBottom(scaleX);
    let axisY = d3.axisLeft(scaleY);
    // 绘制x y 轴
    map
      .append("g")
      .attr("transform", `translate(${mapPadding},${mapHeight - mapPadding})`)
      .call(axisX);
    map
      .append("g")
      .attr("transform", "translate(" + mapPadding + "," + mapPadding + ")")
      .call(axisY);
    //矩形间的空白
    let rectMargin = scaleX.bandwidth() / 3;
    //添加矩形元素
    map
      .selectAll(".MyRect")
      .data(dataList)
      .enter()
      .append("rect")
      .on("mouseover", function (d, i) {
        d3.select(this).attr("fill", "yellow");
      })
      .on("mouseout", function (d, i) {
        d3.select(this).transition().duration(500).attr("fill", "steelblue");
      })
      .attr("class", "MyRect")
      .attr("transform", "translate(" + mapPadding + "," + mapPadding + ")")
      .attr("x", function (d, i) {
        return i * scaleX.bandwidth() + rectMargin / 2;
      })
      // 起始状态是在 y 轴等于 0 的位置(但要注意,不能在起始状态直接返回 0,要应用比例尺计算画布中的位置)
      .attr("y", function (d) {
        var min = scaleY.domain()[0];
        // 值域的最小值
        return scaleY(min);
      })
      .transition()
      .delay(function (d, i) {
        return i * 200;
      })
      .duration(2000)
      // 终止状态是目标值
      .attr("y", function (data) {
        return scaleY(data);
      })
      .attr("width", scaleX.bandwidth() - rectMargin)
      .attr("height", function (data) {
        return mapHeight - mapPadding * 2 - scaleY(data);
      })
      // 矩形填充颜色_填充颜色不要写在CSS里
      .attr("fill", "blue");
    //添加文字元素
    map
      .selectAll(".MyText")
      .data(dataList)
      .enter()
      .append("text")
      .attr("class", "MyText")
      .attr("transform", "translate(" + mapPadding + "," + mapPadding + ")")
      .attr("x", function (d, i) {
        return i * scaleX.bandwidth() + scaleX.bandwidth() / 2;
      })
      .attr("y", function (d) {
        var min = scaleY.domain()[0];
        // 值域的最小值
        return scaleY(min);
      })
      .transition()
      .delay(function (d, i) {
        return i * 200;
      })
      .duration(2000)
      .attr("y", function (data) {
        return scaleY(data);
      })
      // 沿x轴方向偏移量
      // .attr("dx",function(){
      //     return 0
      // })
      // 沿y轴方向偏移量
      .attr("dy", function (d) {
        return -6;
      })
      // 文本对齐方式(相对于文本原点)  start、middle、end或inherit
      .attr("text-anchor", "middle")
      // 文本字体大小
      .attr("font-size", "12px")
      // 文本颜色
      .attr("fill", "red")
      .text(function (d) {
        return d;
      });
  },
};
</script>
<style scoped>
</style>
3、d3柱状图-效果图

在这里插入图片描述

### 回答1: Vue dagre-d3.js是一个用于在Vue.js框架中实现DAG(有向无环图)可视化的库。它结合了vue.js、dagre和d3.js这三个库的功能。 DAG是一种图形结构,其中节点表示任务或事件,边表示任务之间的依赖关系。DAG的可视化对于理解和分析任务之间的关系非常有帮助。 Vue dagre-d3.js库通过提供一组Vue组件,使DAG的可视化变得容易。它利用了dagre-d3和d3.js库的功能来布局和渲染DAG图。 使用Vue dagre-d3.js库,我们可以将DAG图表示为一个Vue组件,该组件可以在Vue应用程序中使用。我们可以定义节点和边,并指定它们之间的关系。然后,Vue dagre-d3.js库将负责将该图形布局为可视化的DAG图。 该库提供了一些自定义选项,可以定义节点的样式,边的样式和布局选项。通过这些选项,我们可以自定义DAG图的外观和布局以满足特定需求。 总之,Vue dagre-d3.js是一个方便易用的库,可以在Vue.js应用程序中实现DAG图的可视化。它简化了创建和布局DAG图的过程,并提供了许多定制选项来满足不同需求。无论是在项目管理、工作流程分析还是其他领域,Vue dagre-d3.js都是一个有价值的工具。 ### 回答2: Vue dagre-d3.js 是一个基于 Vue.js 的库,用于在 web 页面上绘制和可视化图形。它使用了 dagre-d3.js 库作为底层,使得在 Vue.js 中使用 dagre-d3.js 变得更加简单。 dagre-d3.js 是一个使用 d3.js 的 JavaScript 库,用于在 web 页面上绘制有向无环图(DAG)。它提供了一套强大的布局算法,可以将节点和边按照一定的规则自动排列成一张美观的图形。 Vue dagre-d3.js 的主要功能包括创建图形,添加节点和边,设置节点和边的样式,以及支持交互操作。在 Vue.js 中使用它,我们可以通过引入组件的方式来使用它,然后在组件中通过配置选项来定义图形的结构和样式。 通过 Vue dagre-d3.js,我们可以轻松地绘制各种类型的图形,如组织结构图、流程图、依赖关系图等。它提供了丰富的配置选项,可以自定义节点和边的样式,包括颜色、大小、形状等。同时,它还支持拖拽、缩放等交互操作,使得用户可以灵活地操作图形。 总结来说,Vue dagre-d3.js 是一个方便在 Vue.js 中使用 dagre-d3.js 库的工具,它能够帮助我们快速地实现图形的创建、布局和交互。无论是需要在网页上展示图形,还是进行图形数据的可视化分析,Vue dagre-d3.js 都是一个不错的选择。 ### 回答3: Vue Dagre-d3.js是一个基于Vue框架和Dagre-d3.js库的图形可视化组件。 Dagre-d3.js是一个用于绘制有向无环图(DAG)和树的JavaScript库。它基于Dagre图布局引擎和D3.js可视化库,提供了快速、灵活和可定制的图形布局和绘制功能。 Vue Dagre-d3.js利用了Vue框架的特性和Dagre-d3.js的强大功能,提供了一种更加便捷的方式来构建和渲染图形可视化组件。 使用Vue Dagre-d3.js,我们可以轻松地在Vue项目中绘制各种类型的图形,如有向无环图(DAG)、树状图等。我们可以通过定义节点和边的数据模型,并使用Vue的数据驱动特性来动态更新图形的布局和内容。 Vue Dagre-d3.js还提供了丰富的配置选项和事件回调函数,使我们可以自定义图形的外观和交互行为。我们可以设置节点和边的样式、大小和位置,以及鼠标交互时的动画效果。 总而言之,Vue Dagre-d3.js是一个功能强大、易于使用和可定制的图形可视化组件,它结合了Vue框架和Dagre-d3.js库的优势,为我们提供了一种简单而灵活的方式来构建和展示各种图形。无论是构建管理系统、数据分析仪表盘还是可视化数据结构,Vue Dagre-d3.js都是一个不错的选择。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值