d3.js学习笔记

2022-12-15  本文已影响0人  江湖小盛

使用D3查询SVG

d3.select('#rect1')
d3.select('#maingroup rect')
d3.selectAll('.rect1')
d3..selectAll('rect')
d3.selectAll('#maingroup rect'')

使用D3设置SVG中的属性

<rect id="test" class="test" stroke="black" width="60" height="60" fill="#000" x="300" y="300"></rect>
// 设置元素属性
d3.select('.test').attr('x', '100');
// 链式调用,.attr(…)返回的是选择的图元本身
d3.select('svg').attr('width', '100').attr('height', '100').attr('x', '300').attr('y', '300');
// 获取元素属性
const svgWidth = d3.select('svg').attr('width');
d3.select('#group').attr('transform', 'translate(100, 100)');

使用D3添加&删除SVG中的属性

const myRect = d3.select('#test').append('rect').attr('x', '100');
const wrap = d3.select('#wrap').append('g').attr('id', 'group');
// 链式调用
const myRect = d3.select('.wrap').append('g').attr('id', 'group')
.append('rect').attr('fill', 'black').attr('width', '100').attr('height', '100');
d3.select('rect').remove()

D3数据读取- csv数据

d3.csv('test.csv').then(res => {
  console.log(data)
})

D3数值计算

d3.max([1, 2, 3, 5, 4]) // 5
d3.min([1, 2, 3, 5, 4]) // 1
d3.extent([1, 2, 3, 5, 4]) // [1, 5]
const arr = [
  {
      name: 'zhangsan',
      age: 20
    },
    {
      name: 'lisi',
      age: 30
    },
    {
      name: '王五',
      age: 40
    },
  ]

  // 回调函数形式
  const maxAge = d3.max(arr, d => d.age) // 40
  const minAge = d3.min(arr, d => d.age) // 20
  const ageArange = d3.extent(arr, d => age) // [20, 40]

D3线性比例尺

const scale = d3.scaleLinear().domain([0, 100]).range([0, 1000]);
console.log(scale(50)) // 500
console.log(scale(70)) // 700
  const arr = [
    {
      name: 'zhangsan',
      age: 20
    },
    {
      name: 'lisi',
      age: 30
    },
    {
      name: '王五',
      age: 40
    },
  ]

  const xScale = d3.scaleLinear()
    .domain([0, d3.max(arr, d => d.age)])
    .range([0, innerWidth])

D3Band比例尺

const scale = d3.scaleBand().domain(['test1','test2', 'test3']).range([0, 120]);
console.log(scale('test2')) // 40
console.log(scale('test3')) // 80
  const arr = [
    {
      name: 'zhangsan',
      age: 20
    },
    {
      name: 'lisi',
      age: 30
    },
    {
      name: '王五',
      age: 40
    },
  ]

  const yScale = d3.scaleBand()
    .domain(arr.map(d => d.name))
    .range([0, innerHeight])
    .padding(0.1)

坐标轴

引入坐标轴 - Margin

const margin = {top: 60, right: 30, bottom: 60, left: 200}
const innerWidth = width - margin.left - margin.right;
const innerHeight = height - margin.top - margin.bottom;
const g = svg.append('g').attr('id', 'maingroup')
.attr('transform', `translate(${margin.left}, ${margin.top})`);

Data-Join

Data-Join – 用函数设置图元属性

d3.select('rect').attr('attrbuteName', 'value')
d3.selectAll('rect').attr('width', (d, i) => d.age * 1000 )
上一篇 下一篇

猜你喜欢

热点阅读