D3.js SVG JSON 画折线图

效果图

在这里插入图片描述

HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>diaphragm</title>
    <style>
     svg{
         position: absolute;
        left: 15%;
     }
        h1{
            text-align: center;
        }
    </style>
</head>
<body>
<h1>折线图</h1>

<svg width="1200" height="800"></svg>
<script src="jquery-3.3.1.js" type="text/javascript"></script>
<script src="d3.js" type="text/javascript"></script>
<script>
    $(function(){
        svg = d3.select("svg");//获取节点svg
        var g=svg.append("g").attr("transform","translate(40,50)");//在svg中添加一个g标签,并移动到(40,50)

        //获取json
        d3.json("diaphragm.json").then(function(data) {
                    createSvg(data);//调用函数,
                }
        );

        /*
        * 函数作用
        * ①:创建x,y轴,规定x,y轴的值域和定义域,并画出来
        * ②:创建折线并画出来
        * ③:创建点并画出来
        * */
      function createSvg(data)
      {
          /*
          * .extent函数是得到参数数组中的最大值和最小值,并以数组的形式返回
          * */
          var xscale=d3.scaleLinear().domain(d3.extent(data,function(d){return d.x})).range([0,900]);//定义x轴的定义域和值域
          var xAixs=d3.axisBottom(xscale);//坐标轴的类型是底部
          g.append("g").attr("transform","translate(0,500)").call(xAixs);//这一步就是把你设置好的x轴信息显示出来
          var yscale=d3.scaleLinear().domain([0,d3.max(data, function (d) {return d.y})]).range([500,0]);//定义y轴的定义域和值域
          var yAixs=d3.axisLeft(yscale);//坐标轴的类型是底部
          console.log(d3.extent(data,function(d){return d.x}));
          g.append("g").attr("transform","translate(0,0)").call(yAixs);//这一步就是把你设置好的y轴信息显示出来

          /*
          * 使用构造器的x、y访问器函数告诉构造如何访问我们的数据:
          * line.x([x_accessor])
          * line.y([y_accessor])
          * 构造器会将数据集中的每一个数据传入访问器函数,并使用其返回值作为 x坐标或y坐标:
          * var line =d3.line().x(function(d){return d.year;}).y(function(d){return d.yield;});
          * var d = line(data);
          * */
          var line=d3.line().x(function(d){return xscale(d.x)}).y(function(d){return yscale(d.y)}).curve(d3.curveLinear);
          g.append("g").insert("path").attr("d",line(data)).attr("stroke","red").attr("stroke-width","1").attr("fill","none");//通过line得到数值,进行画线,其中画的是折线还是平滑的线是curve()函数里面的参数决定的
          g.selectAll("circle").data(data).enter().append("circle").attr("cx",function(d){return xscale(d.x)}).attr("cy",function(d){return yscale(d.y)}).attr("r","2").attr("fill","green");//得到点,并画出来

      }

    })
</script>
</body>
</html>

JSON

[
  {"x": 0, "y": 11},
  {"x": 1, "y": 35},
  {"x": 2, "y": 23},
  {"x": 3, "y": 78},
  {"x": 4, "y": 55},
  {"x": 5, "y": 18},
  {"x": 6, "y": 98},
  {"x": 7, "y": 100},
  {"x": 8, "y": 22},
  {"x": 9, "y": 65},
  {"x": 10, "y": 115},
  {"x": 11, "y": 125}
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kinghiee

爸爸们求打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值