利用D3的v4版本绘制条形图

1 篇文章 0 订阅
1 篇文章 0 订阅
本文展示了如何使用D3.js的第四个版本创建一个静态的条形图。内容包括图表的呈现,但不包含动画效果。欢迎指正错误。
摘要由CSDN通过智能技术生成

利用D3的v4版本绘制条形图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="js/d3.js"></script>
    <!--<link rel="stylesheet" href="css/styles.css" type="text/css">-->
</head>
<body>

<script type="text/javascript">
    //1、位置,数据,svg
    var width = 600,height = 600,margin = 30;
    var data = [
        [
            {x: 0, y: 5}, {x: 1, y: 9}, {x: 2, y: 7},
            {x: 3, y: 5}, {x: 4, y: 3}, {x: 6, y: 4},
            {x: 7, y: 2}, {x: 8, y: 3}, {x: 9, y: 2}
        ],
        //下面的这个只是定义了一个sin函数而已,
        d3.range(10).map(function (i) {
            return {x: i, y: Math.sin(i) + 5};
        })
    ];

    var svg = d3.select("body")
        .append("svg")
        .attr("width",width)
        .attr("height",height);

    //2、设置比例尺
    //x轴比例尺
    var xScale = d3.scaleLinear()   //scaleLinear() 线性比例尺
        .domain([0,10])             //domain 定义域(因为数据是0到9 十个,所以定义了[0-10])
        .range([0,width - 2 * margin]); //range 值域(表明占据的宽度 而且和定义域对应)

    //y轴比例尺
    var yScale = d3.scaleLinear()
        .domain([0,10])
        .range([height - 2 * margin,0]);    //因坐标原点在左上角,所以把值域颠倒,不然y轴的大小不对(注意是y轴)

    //颜色比例尺
    var color = d3.scaleOrdinal(d3.schemeCategory10);//scaleOrdinal序数比例尺,d3.schemeCategory10 表示10种颜色。

    //3、坐标轴
    //定义x坐标轴
    var xAxis = d3.axisBottom()     //axisBottom表明绘制下方坐标轴
        .scale(xScale);             //此处根据比例尺进行绘制(默认绘制10个刻度)

    //定义y坐标轴
    var yAxis = d3.axisLeft()       //axisBottom表明绘制左侧坐标轴
        .scale(yScale);             //此处根据比例尺进行绘制(默认绘制10个刻度)

    yScale.range([0,height - 2 * margin]);      //上方的设置 会影响到 内部的值(如果不写该行的话,数值是反的)

    //实现坐标轴
    svg.append("g")                 //添加 g 元素
        .attr("class","x-axis")     //样式
        .attr("transform","translate("+margin+","+(height - margin)+")")    //原点位置
        .call(xAxis);               //回调函数 调用自身

    svg.append("g")                 //添加 g 元素
        .attr("class","y-axis")     //样式
        .attr("transform","translate("+margin+","+margin+")")           //原点位置
        .call(yAxis);               //回调函数 调用自己

    //画图
    //定义线条生成器
    var line = d3.line()            //定义
        .x(function (d) {
            return xScale(d.x)      //xScale 比例尺  d.x 是 因为数据是json格式 所以用.
        })
        .y(function (d) {
            return yScale(d.y);     //xScale 比例尺  d.y 是 因为数据是json格式 所以用.
        })
        .curve(d3.curveBasis);      //作用是 使线段变得缓和 //可以删除试下

    //绘制图形
    var lineShape = svg.selectAll(".lineData")  //此处必须是选中所有
        .data(data);                //添加数据
    lineShape.enter()               //enter update exit 中的enter(数据多余元素)
        .append("path")             //添加 path 元素
        .attr("class","lineData")
        .attr("transform","translate("+margin+","+margin+")")       //修改坐标原点
        .attr("d",function (d) {
            return line(d);         //数据点的位置
        })
        .attr("fill","none")        //填充颜色 设为 none
        .attr("stroke",function (d,i) {        //此处是设置 边框颜色
            return color(i);           //利用前方定义的颜色 比例尺
        })
        .attr("stroke-width","3px");       //边框宽度(此处就是线条宽度)
</script>
</body>
</html>

效果图(只是效果,无任何动画):
在这里插入图片描述
不喜勿喷,如遇错误,请帮忙指出,谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值