이어서 chart에 tooltip을 그리는 방법에 대해 포스팅 해보도록 하겠습니다
mouseover/mousemove/mouseout 함수를 사용하여 생성할 예정입니다
기본 차트 그리는 방법은 아래 포스팅에서 확인
d3.js 사용법 - ② bar chart 그리기 (tistory.com)
d3.js 사용법 - ② bar chart 그리기
d3.js 를 사용하여 막대그래프(bar chart)를 그려보기 전에 , 기초 세팅을 해야함 기초 세팅은 아래 포스팅에서 확인가능 d3.js 사용법 - ① 개념 및 초기세팅 (tistory.com) d3.js 사용법 - ① 개념 및 초기
tjqud531531.tistory.com
앞선 포스팅에서 차트를 그리기 위해 drawChart1(getData,type)이라는 함수를 생성했음. tooltip은 chart 안에 생성되어야 하기 때문에 tooltip을 만드는 함수 또한 drawChart함수 안에다가 만들어줍니다.
1. 우선 tooltip을 그리기 위해 d3에서 제공하는 함수들을 활용해 tooltip의 기본틀을 생성해줍니다.
*drawChart 함수 안에 만들기
function drawChart1(getData,type){
//tooltip 틀 만들기
tooltip = d3
.select('body')
.append('div')
.attr('class', 'd3-tooltip')
.style('position', 'absolute')
.style('z-index', '10')
.style('visibility', 'hidden')
.style('padding', '10px')
.style('background', 'rgba(0,0,0,0.6)')
.style('border-radius', '4px')
.style('color', '#fff')
.text('a simple tooltip');
// tooltip에 들어갈 data
var today = new Date();
var month =('0' +(today.getMonth() +1)).slice(-2);
var day = ('0' + (today.getDate()).slice(-2);
var dateString = month + '/' +day;
}
2. var에 데이터를 집어 넣는 함수에 mouse 관련함수 내용 추가하기
<전체 코드>
* drawchart 그리는 부분 + tooltip 부분
function drawChart1(getData,type){
///////////////////////////////////////////////////////////////////////////////////////////////////
// 이곳에서 생성한 tooltip의 모양과 들어갈 data들은 아래 그래프를 그릴때 추가 해줄 거임
// tooltip 틀 만들기
tooltip = d3
.select('body')
.append('div')
.attr('class', 'd3-tooltip')
.style('position', 'absolute')
.style('z-index', '10')
.style('visibility', 'hidden')
.style('padding', '10px')
.style('background', 'rgba(0,0,0,0.6)')
.style('border-radius', '4px')
.style('color', '#fff')
.text('a simple tooltip');
// tooltip에 들어갈 data
var today = new Date();
var month = ('0' + (today.getMonth() + 1)).slice(-2);
var day = ('0' + today.getDate()).slice(-2);
var dateString = month + '/' + day;
///////////////////////////////////////////////////////////////////////////////////////////////////
// 차트의 height와 width를 먼저 설정해준뒤 d3에서 제공해주는 select를 활용하여 svg 공간 생성해주기
// 순서대로 척도만들고, 축도 생성해주기
if(!type){
chartHeight = 500
chartWidth = 500
chartSvg = d3.select("#yerin-chart").append("svg").attr("height",500).attr("width",500)
.attr("id","svg1")
// 척도 만들기
Yscale = d3.scale.linear().domain([0,40]).range([470,30])
Xscale = d3.scale.ordinal().domain(["A","B","C","D","E","F","G","H","I","J"]).rangeBands([30,470]);
// 축만들기
Yaxis = d3.svg.axis().scale(Yscale).orient("left")
Xaxis = d3.svg.axis().scale(Xscale).orient("bottom")
// 만들어진 svg 공간에 'g'공간을 추가한 후 이 공간 안에 축을 그리는 axis를 불러온다.
chartSvg.append("g").call(Yaxis).attr("transform","translate(30,0)").attr("class","axis")
chartSvg.append("g").call(Xaxis).attr("transform","translate(0,470)").attr("class","axis")
}
dataSvg = chartSvg.append("g").attr("class","datasvg");
if(type=="var1"){
dataSvg.selectAll("rect").data(getData).enter().append("rect")
.attr("x", function(d){return Xscale(d.group)})
.attr("y", function(d){return Yscale(d.var1)})
.attr("width",30)
.attr("height", function(d){return chartHeight-Yscale(d.var1)-30})
.attr("transform","translate(7,0)")
.style("fill","#687F8F").attr("id","var1")
.on('mouseover', function (d, i) {
tooltip
.html(
`<div>Group: ${d.group}</div>
<div>Value: ${d.var1}</div>
<div>Time : ${dateString}</div>`
)
.style('visibility', 'visible');
})
.on('mousemove', function () {
tooltip
.style('top', d3.event.pageY - 10 + 'px')
.style('left', d3.event.pageX + 10 + 'px');
})
.on('mouseout', function () {
tooltip.html(``).style('visibility', 'hidden');
});
}else if(type=="var2"){
dataSvg.selectAll("rect").data(getData).enter().append("rect")
.attr("x", function(d){return Xscale(d.group)}).attr("y", function(d){return Yscale(d.var2)})
.attr("width",30).attr("height", function(d){return chartHeight-Yscale(d.var2)-30}).attr("transform","translate(7,0)")
.style("fill","#687F8F").attr("id","var2")
.on('mouseover', function (d, i) {
tooltip
.html(
`<div>Group: ${d.group}</div><div>Value: ${d.var2}</div><div>Time : ${dateString}</div>`
)
.style('visibility', 'visible');
})
.on('mousemove', function () {
tooltip
.style('top', d3.event.pageY - 10 + 'px')
.style('left', d3.event.pageX + 10 + 'px');
})
.on('mouseout', function () {
tooltip.html(``).style('visibility', 'hidden');
});
}
}
<실행결과>
반응형
'LANGUAGE > JAVASCRIPT' 카테고리의 다른 글
[JAVASCRIPT] 날짜 정보 객체 / D-DAY 계산법 (2) | 2022.11.13 |
---|---|
javascript<객체> 내장객체, 브라우저객체모델, 문서객체모델 (1) | 2022.11.13 |
d3.js 사용법 - ③ bar chart에 click 이벤트 추가 (0) | 2022.11.09 |
d3.js 막대그래프 높이 및 위치 설정 (0) | 2022.11.09 |
d3.js 사용법 - ② bar chart 그리기 (0) | 2022.11.08 |