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

d3最新是V5版的,比起V2的API变动了不少,写下我实现过程

效果图:

面积图:

折线图:

 

目录结构:

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link href="css/style.css" media="screen" rel="stylesheet" type="text/css"/>
    <title>Linechart1</title>
</head>
<body>
    <div id="container"></div>

    <script src="https://d3js.org/d3.v5.min.js"></script>
    <script src="js/index.js"></script>
</body>
</html>
index.html

 

#container{
    background: #ddd;
    width: 500px;
    height: 250px;
}

path{
    fill: none;
    stroke: steelblue;
    stroke-width: 2;
}

.domain ,.tick line{
    stroke:gray;
    stroke-width: 1;
}
style.css
var width=500,height=250,
    margin={left:50,top:30,right:20,bottom:20},
    g_width=width-margin.left-margin.right,
    g_height=height-margin.top-margin.bottom;

//svg
d3.select("#container").append("svg")
    //width,height
    .attr("width",width)
    .attr("height",height)

var g=d3.select("svg")
    .append("g")
    .attr("transform","translate("+margin.left+","+margin.top+")");

var data=[1,8,5,6,8,9,3,5,2]
//Scale
var scale_x=d3.scaleLinear()
    .domain([0,data.length-1])
    .range([0,g_width]);
var scale_y=d3.scaleLinear()
    .domain([0,d3.max(data)])
    .range([g_height,0]);

//画线函数
var line_generator= d3.line()
    .x(function (d,i) {
        return scale_x(i);
    })
    .y(function (d) {
        return scale_y(d);
    })
    .curve(d3.curveMonotoneX)
    // .curve(d3.curveMonotoneX) // apply smoothing to the line

//画路径
g.append("path")
    .attr("d",line_generator(data)) //d="M1,0L20,40.....  d-path data

// //画面积函数
// var area_generator= d3.area()
//     .x(function (d,i) {
//         return scale_x(i);
//     })
//     .y0(g_height)
//     .y1(function (d) {
//         return scale_y(d);
//     })
//     .curve(d3.curveMonotoneX)
//
// //画面积
// g.append("path")
//     .attr("d",area_generator(data)) //d="M1,0L20,40.....  d-path data
//     .style("fill","steelblue")


//X轴
g.append("g")
    .call(d3.axisBottom(scale_x))
    .attr("transform","translate(0,"+g_height+")")

//Y轴
g.append("g")
    .call(d3.axisLeft(scale_y))

//y轴文字
g.append("text")
    .text("Price($)")
    .attr("transform","rotate(-90)")
    .attr("dy","1em")
    .attr("text-anchor","end")

其中,使用红色部分,注释绿色部分是面积图

  使用绿色部分,注释红色部分是折线图

  data数组是数据来源。

 

参考教程:https://www.imooc.com/learn/103

转载于:https://www.cnblogs.com/feiquan/p/10759393.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3是一个流行的JavaScript框架,而D3.js是一个强大的JavaScript形库,用于创建各种类型的数据可视化。在Vue3中使用D3.js可以轻松地创建网络。 以下是使用Vue3和D3.js创建网络的步骤: 1. 首先,您需要在Vue3项目中安装D3.js。可以使用npm包管理器执行以下命令:npm install d3 2. 在Vue组件中导入D3.js:import * as d3 from 'd3' 3. 在组件的mounted生命周期钩子中,使用D3.js创建SVG容器并设置其大小和位置: ``` mounted() { const svg = d3.select('#network-chart') .append('svg') .attr('width', this.width) .attr('height', this.height) } ``` 4. 接下来,您需要将网络数据传递给Vue组件。可以通过props来实现这一点。 5. 使用D3.js创建节点和连线。这可以通过以下代码完成: ``` const node = svg.selectAll('.node') .data(nodes) .enter() .append('circle') .attr('class', 'node') .attr('r', this.nodeRadius) .attr('fill', 'blue') const link = svg.selectAll('.link') .data(links) .enter() .append('line') .attr('class', 'link') .attr('stroke', 'gray') ``` 6. 最后,在组件的updated生命周期钩子中更新节点和连线的位置: ``` updated() { const node = svg.selectAll('.node') .attr('cx', d => d.x) .attr('cy', d => d.y) const link = svg.selectAll('.link') .attr('x1', d => d.source.x) .attr('y1', d => d.source.y) .attr('x2', d => d.target.x) .attr('y2', d => d.target.y) } ``` 以上就是使用Vue3和D3.js实现网络的简单步骤,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值