上一篇是使用D3繪制畫布,這一篇的內容是在畫布上繪制曲線。
1.之前的html代碼沒有變化,但是我還是貼出來
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link rel="stylesheet" href="css/style.css" /> </head> <body> <div id="container"></div> </body> <script type="text/javascript" src="js/d3.js" ></script> <script type="text/javascript" src="js/index.js" ></script> </html>
2.css樣式添加了path的樣式
#container { width: 500px; height: 250px; background-color: #ccc; margin: 0 auto; margin-top: 100px; } path{ fill: none; stroke: cornflowerblue; stroke-width: 2px; }
3.主要代碼還是在js中實現的
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; //獲取div,向里面添加svg var svg = d3.select("#container") .append("svg:svg")//在“container”中插入svg .attr("width", width)//設置svg的寬度 .attr("height", height)//設置svg的高度 //添加g元素 var g = d3.select("svg") .append("g") .attr("transform","translate("+margin.left+","+margin.top+")") var data = [1,3,5,9,4,2,3,6,8]//定義一個數組,里面放置了一些任意數字 var scale_x = d3.scale.linear()//把曲線沿x軸按比例放大 .domain([0, data.length-1]) .range([0, g_width]) var scale_y = d3.scale.linear()//把曲線沿y軸按比例放大 .domain([0, d3.max(data)]) .range([0, g_height]) var line_generator = d3.svg.line()//d3中繪制曲線的函數 .x(function(d, i){return scale_x(i);})//曲線中x的值 .y(function(d){return scale_y(d);})//曲線中y的值 .interpolate("cardinal")//把曲線設置光滑 d3.select("g") .append("path") .attr("d", line_generator(data))
這些都是我在慕課網上邊學編寫的文章,沒什么基礎的同學也可以去慕課網上看看,還是蠻不錯的一個網站,可以邊學邊練習。