【D3.js数据可视化系列教程】--(十三)坐标轴

1. 定义和创建X轴

//定义X轴
var xAxis = d3.svg.axis()
     .scale(xScale)
     .orient("bottom");

//创建X轴
svg.append("g").call(xAxis);

其中:

  • scale函数用来指定坐标轴的比例尺。
  • orient函数用来指定坐标轴的方位,可取值有leftrighttopbottom
  • 调用的时候任意的选择器call调用轴,或者xAxis(选择器)均可。

效果:

  2. 调整X轴的样式

为显示刻度尺可以设置样式为:

.axis path,
.axis line {
    fill: none;
    stroke: black;
    shape-rendering: crispEdges;//这个属性用来显示轴
}

.axis text {
    font-family: sans-serif;
    font-size: 11px;
}

并且把坐标轴平移到下面:

svg.append("g")
    .attr("class", "axis")
    .attr("transform", "translate(0," + (h - padding) + ")")
    .call(xAxis);

效果:

  3. 设置刻度数

var xAxis = d3.svg.axis()
              .scale(xScale)
              .orient("bottom")
              .ticks(5);  //设置刻度数
  • 注意这个ticks函数指定的数字只是一个大概的数量,具体生成多少D3会自动调整。

效果:

  4. Y轴

//定义Y轴
var yAxis = d3.svg.axis()
              .scale(yScale)
              .orient("left")
              .ticks(5);

同样设置起始坐标

//创建Y轴
svg.append("g")
    .attr("class", "axis")
    .attr("transform", "translate(" + padding + ",0)")
    .call(yAxis);

效果:

  5. 设置刻度的格式

var format = d3.format(".1%");
xAxis.tickFormat(format);

  6. 最后的源码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>testD3-11-axes.html</title>
    <script type="text/javascript" src="d3.js"></script>
    <style type="text/css">
            .axis path,
            .axis line {
                fill: none;
                stroke: black;
                shape-rendering: crispEdges;
            }
            .axis text {
                font-family: sans-serif;
                font-size: 11px;
            }
    </style>
    </head>
    <body>
        <script type="text/javascript">
            // 高宽
            var w = 500;
            var h = 300;
            var padding = 20;

            var dataset = [
                [5, 20], [480, 90], [250, 50], [100, 33], [330, 95],
                [410, 12], [475, 44], [25, 67], [85, 21], [220, 88],
                [600, 150]
              ];

            // 创建比例尺
            var xScale = d3.scale.linear()
                                 .domain([0, d3.max(dataset, function(d) { return d[0]; })])
                                 .range([padding, w - padding * 2]);
            var yScale = d3.scale.linear()
                                 .domain([0, d3.max(dataset, function(d) { return d[1]; })])
                                 .range([h - padding, padding]);
            var rScale = d3.scale.linear()
                                 .domain([0, d3.max(dataset, function(d) { return d[1]; })])
                                 .range([2, 5]);

            var formatAsPercentage = d3.format(".1%");//设置刻度的格式

            // 创建SVG
            var svg = d3.select("body")
                        .append("svg")
                        .attr("width", w)
                        .attr("height", h);

            svg.selectAll("circle")
               .data(dataset)
               .enter()
               .append("circle")
               .attr("cx", function(d) {
                    return xScale(d[0])+30;//设置原点坐标,以及横轴位移量
               })
               .attr("cy", function(d) {
                    return yScale(d[1]);
               })
               .attr("r", function(d) {
                    return rScale(d[1]);
               });

            svg.selectAll("text")
               .data(dataset)
               .enter()
               .append("text")
               .text(function(d) {
                    return d[0] + "," + d[1];
               })
               .attr("x", function(d) {
                    return xScale(d[0])+30;
               })
               .attr("y", function(d) {
                    return yScale(d[1]);
               })
               .attr("font-family", "sans-serif")
               .attr("font-size", "11px")
               .attr("fill", "red");

            // 定义X轴
            var xAxis = d3.svg.axis()
                              .scale(xScale)
                              .ticks(5)//最多刻度数,连上原点
                              .orient("bottom")
                              .tickFormat(format);//添加刻度格式
            // 定义Y轴
            var yAxis = d3.svg.axis()
                              .scale(yScale)
                              .orient("left")
                              .ticks(5)
                              .tickFormat(format);

            // 创建X轴
            svg.append("g")
                .attr("class", "axis")
                .attr("transform", "translate(0," + (h - padding) + ")")//设置据下边界的距离
                .call(xAxis);

            // 创建Y轴
            svg.append("g")
                .attr("class", "axis")
                .attr("transform", "translate(" + padding + ",0)")//设置轴据左边界的距离
                .call(yAxis);

        </script>

    </body>
</html>

  7. 最后的效果:

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值