일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코테
- 안드로이드 스튜디오
- 백준구현
- 백준구현문제
- 백준nodejs
- 프로그래머스JS
- 다이나믹프로그래밍
- CSS
- 익스프레스
- 포이마웹
- css기초
- js코테
- 리액트
- 코딩테스트
- 프로그래머스
- HTML5
- 자바스크립트
- HTML
- 백준알고리즘
- 리액트커뮤니티
- 몽고DB
- 백준골드
- 알고리즘
- JS프로그래머스
- 프로그래머스코테
- 백준
- JS
- dp알고리즘
- 리액트댓글기능
- 백준js
- Today
- Total
개발새발 로그
D3 척도와 축 - 선형 척도, 순서형 척도, 묶음 척도, 영역과 여백, x축과 y축(axis) 본문
d3-scale | D3 by Observable
d3js.org
선형 척도
x값을 넣었을 때 f(x)로 결과값을 나타내는 것
선형척도(scaleLinear)
const x =d3.scaleLinear();
x.domain([0,10]);
x.range([0,100]);
console.log(x(0)); // 0
console.log(x(10)); // 100
d3의 scaleLinear를 호출하면 선형척도 함수를 반환한다.
x는 domain과 range 메서드로 값을 설정한다.
f(x) = y = x * 10으로 인해 0을 넣으면 0이 되고, 10을 넣으면 100이 된다.
이게 가능한 이유는 domain과 range를 설정해줘서 가능했다.
domain과 range
domain 0이 range의 0에 대응되고,
domain의 10이 range의 100에 대응된다.
domain([최소,최대])
- 입력 데이터, 데이터 값을 기반으로 최소(0) - 최대값
- [domain]은 숫자배열
- 배열 내 요소는 2개 이상(일반적으로 2개)
range([최소,최대])
- 출력 데이터, 보여주고 싶은 최소-최대값
- [range]는 숫자, interpolator(색상,문자 등) 배열
- 배열 내 요소는 2개 이상(일반적으로 2개)
순서형 척도(scaleOrdinal) & 묶음 척도(scaleBand)
- 숫자값을 사용하지 않는 정성적 데이터를 위한 척도 (영화 이름 같은 척도)
순서형 척도
const ordinal =d3.scaleOrdinal()
.domain([1,2,3,4,5])
.range([6,7,8,9,10])
console.log(ordinal(1)); // 6
console.log(ordinal(3)); // 8
- domain에 정의된 배열이 range 배열과 동일한 인덱스로 요소가 매핑됨
- 카테고리형
-range에는 보통 색상값을 넣음
묶음 척도
const band = d3.scaleBand()
.domain([1,2,3,4,5])
.range([1,100])
console.log(band(1)); // 1
console.log(band(5)); // 80.2
console.log(band.bandwidth()); //19.8
- 균일한 band로 range를 나눈다.
- 전체 Range를 일정한 구간으로 나눈다.
- 정량이든 정성이든 모두 활용 가능
영역과 여백, x축과 y축(axis)
척도와 축을 정하기 전에 정해야하는 것이 영역과 여백이다.
처음에 svg의 영역으로 아래와 같이 지정했고,
각 이미지를 그릴때 아래와 같이 지정해줬다.
이렇게 지정하고 translate로 각각 값을 상수로 이동하게되면 나중에 꼬이게 될 수 있다.
영역과 여백 설정하기
d3는 척도를 가지고 차트를 그릴 때
영역에 대한 설정이 필요하다.
실제 차트를 그리는 영역과 여백을 분리해서 작성하면 좋다.
위 처럼 margin과 width,height를 지정하면 svgGroup 데이터를 설정하는 부분에서 알기 쉽게 지정할 수 있다.
그리고 차트는 g 태그안에 그려지게 된다.
이를 통해 하드코딩한 값을 바꿔줄 수 있다.
축(axis)
d3-axis | D3 by Observable
d3js.org
axis는 아래와 같이 대부분 사용된다.
- axisTop(scale)
- axisLeft(scale)
- axisBottom(scale)
- axisRight(scale)
const xAxis = d3.axisTop(x)
.ticks(4)
.tickFormat(function(d,i) {return `${!!d ? Math.floor(d/10000) : d}만명`})
ticks는 tick의 개수를 설정하고
tickFormat은 tick이 어떻게 출력될지 지정해 줄 수 있다.
이렇게 설정하고나서 실행하면 출력이 되지 않는다.
아래와 같이 call을 넣어줘야한다.
svgGroup.append('g')
.call(xAxis);
y축도 만들어준다.
const yAxis = d3.axisleft(y)
svgGroup.append("g")
.call(yAxis);
y축은 y척도에서 이미 아래와 같이 지정해 주었다면 간격과 위치에 대해서 신경쓰지 않아도된다.
const band = d3.scaleBand()
.domain(nameList)
.range([0,height])
.paddingInner(0.2)
척도와 축은 많은 옵션이 있다.
나중에 꼭 탐구해보자
'자바스크립트' 카테고리의 다른 글
D3.js 인터렉티브 적용하기 (1) | 2024.01.24 |
---|---|
D3.js 데이터 로딩하는 함수 (0) | 2024.01.24 |
D3.js 데이터 조인 (2) | 2024.01.24 |
D3.js 첫 시작하기 - 기본 메서드들 사용 (1) | 2024.01.23 |
D3를 사용하기 위한 SVG에 대해 알아보기 (1) | 2024.01.23 |