• react项目加d3.js


    在react项目中加入svg图表,使用d3.js

    在项目中加入d3:在终端中输入命令cnpm || npm install d3 --save

    在组件中加入图表,代码如下:

    import React, { Component } from 'react';
    import * as d3 from 'd3';


    class BarGraph extends Component {

    render() {

    /*添加一个svg画布*/
    var width = 900; //画布的宽度
    var height = 600; //画布的高度
    var svg = d3.select("#theChart") //选择文档中的body元素
    .append("svg") //添加一个svg元素
    .attr("width", width) //设定宽度
    .attr("height", height);

    var marge = {top:60,bottom:60,left:60,right:60}
    var g = svg.append("g")
    .attr("transform","translate("+marge.top+","+marge.left+")");
    /*数据集*/
    var dataset = [10,20,30,23,13,40,27,35,20];

    /*在x/y轴方向绘制坐标轴*/
    var xScale = d3.scaleBand()
    .domain(d3.range(dataset.length))
    .rangeRound([0,width-marge.left-marge.right]);
    var xAxis = d3.axisBottom(xScale);
    g.append("g")
    .attr("transform","translate("+0+","+(height-marge.top-marge.bottom)+")")
    .call(xAxis);
    var yScale = d3.scaleLinear()
    .domain([0,d3.max(dataset)])
    .range([height-marge.top-marge.bottom,0]);
    var yAxis = d3.axisLeft(yScale);
    g.append("g")
    .attr("transform","translate(0,0)")
    .call(yAxis);
    /*为每个矩形和对应的文字创建一个分组<g>*/
    var gs = g.selectAll(".rect")
    .data(dataset)
    .enter()
    .append("g");

    /*绘制矩形 左上角坐标x、y和长宽*/
    var rectPadding = 20;//矩形之间的间隙
    gs.append("rect")
    .attr("x",function(d,i){
    return xScale(i)+rectPadding/2;
    })
    .attr("y",function(d){ /*改变*/
    var min=yScale.domain()[0];
    return yScale(min);
    })
    .attr("width",function(){
    return xScale.step()-rectPadding;
    })
    .attr("height",function(d){
    return 0;
    })
    .attr("fill","blue")
    .transition()
    .duration(2000)
    .delay(function(d,i){
    return i*400;
    })
    /*.ease(d3.easeElasticInOut) */
    .attr("y",function(d){ /*回到最终状态*/
    return yScale(d);
    })
    .attr("height",function(d){
    return height-marge.top-marge.bottom-yScale(d);
    });
    /*绘制文字给文字添加动态效果*/
    gs.append("text")
    .attr("x",function(d,i){
    return xScale(i)+rectPadding/2;
    })
    .attr("y",function(d){/*改变的部分*/
    var min=yScale.domain()[0];
    return yScale(min);
    })
    .attr("dx",function(){
    return (xScale.step()-rectPadding)/2-10;
    })
    .attr("dy",0)
    .text(function(d){
    return d;
    })
    .transition()
    .duration(2000)
    .delay(function(d,i){
    return i*400;
    })
    /* .ease(d3.easeElasticInOut)*/
    .attr("y",function(d){
    return yScale(d);
    });

    return (
    <div id="theChart"></div>
    );
    }
    }

    export default BarGraph;

  • 相关阅读:
    linux基础(六) --- 杀死包含应用名称的所有进程
    linux基础(五) ---ubuntu 修改国内源
    linux基础----vim编辑器(三)
    linux基础----vim编辑器(二)
    linux基础----vim编辑器(一)
    计算机基础----必会单词
    支付宝还可以更进一步的改造世界。
    insertAdajcentHTML
    11个触摸设备的触摸时间处理
    手机上的jQuery
  • 原文地址:https://www.cnblogs.com/zyx-blog/p/9025453.html
Copyright © 2020-2023  润新知