d3.js 創建散點圖

最近學d3,對着書中的例子敲了一遍

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>散點圖</title>
    <script src="d3/d3.js"></script>
    <script src="jquery-2.2.4.js"></script>
    <style>
        .axis path,
        .axis line{
            fill: none;
            stroke: black;
            shape-rendering: crispEdges;
        }
    </style>
</head>
<body>
<script type="application/javascript">

    //定義圖像大小、座標軸大小
    var svgWidth = 600;
    var svgHeight = 600;
    var xAxisWidth = 500;
    var yAxisWidth = 500;
    var padding = {top:30,bottom:30,left:50,right:30};
    //圓心數據
    var center = [[0.5,0.5],[0.7,0.8],[0.4,0.9],[0.11,0.32],[0.88,0.25],
        [0.75,0.12],[0.5,0.1],[0.2,0.3],[0.4,0.1],[0.6,0.7]];

    //定義比例尺
    var xScale = d3.scale.linear()
            .domain([0,1.2*d3.max(center,function(d){
                return d[0];
            })])
            .range([0,xAxisWidth]);
    var yScale = d3.scale.linear()
            .domain([0,1.2*d3.max(center, function (d) {
                return d[1];
            })])
            .range([0,yAxisWidth]);
    //數據寫入選擇集:創建svg,創建圖像(update、enter、exit),確定座標、響應與其他屬性
    var svg = d3.select("body").append("svg")
            .attr("width",svgWidth)
            .attr("height",svgHeight);
    var circles = svg.selectAll("circle")
            .data(center)
            .enter()
            .append("circle")
            .attr("fill","black")
            .attr("cx",function(d){
                return padding.left+xScale(d[0]);
            })
            .attr("cy",function(d){
                return svgHeight-padding.bottom-yScale(d[1]);
            })
            .attr("r",8);
    circles.on("click",function(d,i){
        alert(d+"  "+i);
    });
    //顯示座標軸
    var xSvgAxis = svg.append("g")
            .attr("class","axis")
            .attr("transform","translate("+padding.left+","+(svgHeight-padding.bottom)+")");
    var ySvgAxis = svg.append("g")
            .attr("class","axis")
            .attr("transform","translate("+padding.left+","+(svgHeight-padding.bottom-yAxisWidth)+")");
    var xAxis = d3.svg.axis()
            .scale(xScale)
            .orient("bottom");
    yScale.range([yAxisWidth,0]);
    var yAxis = d3.svg.axis()
            .scale(yScale)
            .orient("left");
    xSvgAxis.call(xAxis);
    ySvgAxis.call(yAxis);

</script>
</body>
</html>

效果圖:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章