D3.js 入门1:矩形、比例尺、坐标轴

1 篇文章 0 订阅

1 画矩形

x,y为左上角,利用width 和 height控制大小。

svg.selectAll("rect")  //选择svg内所有的矩形
    .data(dataset)  //绑定数组
    .enter()       //指定选择集的enter部分
    .append("rect")//添加足够数量的矩形元素
    .attr("x", 20)
    .attr("y", (d, i) => { 
        return i * rectHeight;
    })
    // .attr("width", (d) => { 
    //     return d;
    // })
    .attr("width", (d) => { 
        return d / dataset.reduce((a, b) => {
            return b > a ? b : a;
        }) * 100;
    }) // 瞎搞 后面可能好像可以用比例尺解决
    .attr("height", rectHeight - 2)
    .attr("fill", "steelBlue"); // 填充为蓝色 

在这里插入图片描述

2 比例尺
// 线性比例尺
var min = d3.min(dataset); // d3 用来求数组最大最小值的函数
var max = d3.max(dataset);

var linear = d3.scale.linear()
        .domain([min, max])
        .range([0, 300]);

linear(0.9);    //返回 0
linear(2.3);    //返回 175
linear(3.3);    //返回 300

// d3.scale.linear() 返回一个线性比例尺。domain() 和 range() 分别设定比例尺的定义域和值域。


// 序数比例尺
var index = [0, 1, 2, 3, 4];
var color = ["red", "blue", "green", "yellow", "black"];

var ordinal = d3.scale.ordinal()
        .domain(index)
        .range(color);

ordinal(0); //返回 red
ordinal(2); //返回 green
ordinal(4); //返回 black

反映到图形中:


var width = 300;  //画布的宽度
var height = 300;   //画布的高度

var svg = d3.select("body")     //选择文档中的body元素
    .append("svg")          //添加一个svg元素
    .attr("width", width)       //设定宽度
    .attr("height", height);    //设定高度

var dataset = [ 250 , 210 , 170 , 130 , 90 ];  //数据(表示矩形的宽度)
var rectHeight = 25;   //每个矩形所占的像素高度(包括空白)

var min = d3.min(dataset); // d3 用来求数组最大最小值的函数
var max = d3.max(dataset);

var linear = d3.scale.linear()
        .domain([min, max])
        .range([0, 300]);

svg.selectAll("rect")  //选择svg内所有的矩形
    .data(dataset)  //绑定数组
    .enter()       //指定选择集的enter部分
    .append("rect")//添加足够数量的矩形元素
    .attr("x", 20)
    .attr("y", (d, i) => { 
        return i * rectHeight;
    })
    .attr("width", (d) => { 
        return linear(d);
    }) // 瞎搞 后面可能好像用比例尺解决
    .attr("height", rectHeight - 2)
    .attr("fill", "steelBlue"); // 填充为蓝色 

3 坐标轴
var axis = d3.svg.axis()
            .scale(linear)      //指定比例尺
            .orient("bottom")   //指定刻度的方向
            .ticks(4);          //指定刻度的数量

svg.append("g")
    .attr("class","axis")
    .attr("transform","translate(20,130)")
    .call(axis);

一个样式:

.axis path,
.axis line{
    fill: none;
    stroke: black;
    shape-rendering: crispEdges;
}

.axis text {
    font-family: sans-serif;
    font-size: 11px;
}
p {
    background-color: red;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值