Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
Sunburst Tutorial 2 vs. 3 --> https://denjn5.github.io/tutorials/
생성일
9년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
5 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
57 행
복사
28 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
79 행
복사
<!DOCTYPE html>
<!DOCTYPE html>
<head>
<head>
복사
복사됨
복사
복사됨
<title>Sunburst Tutorial (d3 v4), Part
2
</title>
<title>Sunburst Tutorial (d3 v4), Part
3
</title>
<script src='../plugins/d3/d3.v4.min.js'></script>
<script src='../plugins/d3/d3.v4.min.js'></script>
</head>
</head>
<body>
<body>
<svg></svg>
<svg></svg>
</body>
</body>
<script>
<script>
var vWidth = 300;
var vWidth = 300;
var vHeight = 300;
var vHeight = 300;
var vRadius = Math.min(vWidth, vHeight) / 2;
var vRadius = Math.min(vWidth, vHeight) / 2;
var vColor = d3.scaleOrdinal(d3.schemeCategory20b);
var vColor = d3.scaleOrdinal(d3.schemeCategory20b);
// Prepare our physical space
// Prepare our physical space
var g = d3.select('svg')
var g = d3.select('svg')
.attr('width', vWidth).attr('height', vHeight)
.attr('width', vWidth).attr('height', vHeight)
.append('g')
.append('g')
.attr('transform', 'translate(' + vWidth / 2 + ',' + vHeight / 2 + ')');
.attr('transform', 'translate(' + vWidth / 2 + ',' + vHeight / 2 + ')');
// d3 layout
// d3 layout
var vLayout = d3.partition().size([2 * Math.PI, vRadius]);
var vLayout = d3.partition().size([2 * Math.PI, vRadius]);
var vArc = d3.arc()
var vArc = d3.arc()
.startAngle(function (d) { return d.x0; })
.startAngle(function (d) { return d.x0; })
.endAngle(function (d) { return d.x1; })
.endAngle(function (d) { return d.x1; })
.innerRadius(function (d) { return d.y0; })
.innerRadius(function (d) { return d.y0; })
.outerRadius(function (d) { return d.y1; });
.outerRadius(function (d) { return d.y1; });
// Get the data from our JSON file
// Get the data from our JSON file
d3.json('data-simple.json', function(error, vData) {
d3.json('data-simple.json', function(error, vData) {
if (error) throw error;
if (error) throw error;
drawSunburst(vData);
drawSunburst(vData);
});
});
/**
/**
* Draw our sunburst
* Draw our sunburst
* @param {object} data - Hierarchical data
* @param {object} data - Hierarchical data
*/
*/
function drawSunburst(data) {
function drawSunburst(data) {
// Layout prep
// Layout prep
var vRoot = d3.hierarchy(data).sum(function (d) { return d.size});
var vRoot = d3.hierarchy(data).sum(function (d) { return d.size});
var vNodes = vRoot.descendants();
var vNodes = vRoot.descendants();
vLayout(vRoot);
vLayout(vRoot);
복사
복사됨
복사
복사됨
var vSlices = g.selectAll('
path
').data(vNodes).enter().append('
path
');
var vSlices = g.selectAll('
g
').data(vNodes).enter().append('
g
');
// Draw sunburst
// Draw sunburst
복사
복사됨
복사
복사됨
vSlices
vSlices
.append('path')
.attr('display', function (d) { return d.depth ? null : 'none'; })
.attr('display', function (d) { return d.depth ? null : 'none'; })
.attr('d', vArc)
.attr('d', vArc)
.style('stroke', '#fff')
.style('stroke', '#fff')
복사
복사됨
복사
복사됨
.style('fill', function (d) {
.style('fill', function (d) {
return vColor((d.children ? d : d.parent).data.id); });
return vColor((d.children ? d : d.parent).data.id); });
// Add text
vSlices.append('text')
.filter(function(d) { return d.parent; })
.attr('transform', function(d) {
return 'translate(' + vArc.centroid(d) + ')rotate(' + computeTextRotation(d) + ')'; })
.attr('dx', '-20')
.attr('dy', '.5em')
.text(function(d) { return d.data.id });
}
/**
* Calculate the rotation for each label based on its location in the sunburst.
* @param {Node} d - the d3 note for which we're computing text rotation
* @return {Number} the value that should populate the transform: rotate() statement
*/
function computeTextRotation(d) {
var angle = (d.x0 + d.x1) / Math.PI * 90;
// Avoid upside-down labels
return (angle < 120 || angle > 270) ? angle : angle + 180; // labels as rims
//return (angle < 180) ? angle - 90 : angle + 90; // labels as spokes
}
}
</script>
</script>
저장된 비교 결과
원본
파일 열기
<!DOCTYPE html> <head> <title>Sunburst Tutorial (d3 v4), Part 2</title> <script src='../plugins/d3/d3.v4.min.js'></script> </head> <body> <svg></svg> </body> <script> var vWidth = 300; var vHeight = 300; var vRadius = Math.min(vWidth, vHeight) / 2; var vColor = d3.scaleOrdinal(d3.schemeCategory20b); // Prepare our physical space var g = d3.select('svg') .attr('width', vWidth).attr('height', vHeight) .append('g') .attr('transform', 'translate(' + vWidth / 2 + ',' + vHeight / 2 + ')'); // d3 layout var vLayout = d3.partition().size([2 * Math.PI, vRadius]); var vArc = d3.arc() .startAngle(function (d) { return d.x0; }) .endAngle(function (d) { return d.x1; }) .innerRadius(function (d) { return d.y0; }) .outerRadius(function (d) { return d.y1; }); // Get the data from our JSON file d3.json('data-simple.json', function(error, vData) { if (error) throw error; drawSunburst(vData); }); /** * Draw our sunburst * @param {object} data - Hierarchical data */ function drawSunburst(data) { // Layout prep var vRoot = d3.hierarchy(data).sum(function (d) { return d.size}); var vNodes = vRoot.descendants(); vLayout(vRoot); var vSlices = g.selectAll('path').data(vNodes).enter().append('path'); // Draw sunburst vSlices .attr('display', function (d) { return d.depth ? null : 'none'; }) .attr('d', vArc) .style('stroke', '#fff') .style('fill', function (d) { return vColor((d.children ? d : d.parent).data.id); }); } </script>
수정본
파일 열기
<!DOCTYPE html> <head> <title>Sunburst Tutorial (d3 v4), Part 3</title> <script src='../plugins/d3/d3.v4.min.js'></script> </head> <body> <svg></svg> </body> <script> var vWidth = 300; var vHeight = 300; var vRadius = Math.min(vWidth, vHeight) / 2; var vColor = d3.scaleOrdinal(d3.schemeCategory20b); // Prepare our physical space var g = d3.select('svg') .attr('width', vWidth).attr('height', vHeight) .append('g') .attr('transform', 'translate(' + vWidth / 2 + ',' + vHeight / 2 + ')'); // d3 layout var vLayout = d3.partition().size([2 * Math.PI, vRadius]); var vArc = d3.arc() .startAngle(function (d) { return d.x0; }) .endAngle(function (d) { return d.x1; }) .innerRadius(function (d) { return d.y0; }) .outerRadius(function (d) { return d.y1; }); // Get the data from our JSON file d3.json('data-simple.json', function(error, vData) { if (error) throw error; drawSunburst(vData); }); /** * Draw our sunburst * @param {object} data - Hierarchical data */ function drawSunburst(data) { // Layout prep var vRoot = d3.hierarchy(data).sum(function (d) { return d.size}); var vNodes = vRoot.descendants(); vLayout(vRoot); var vSlices = g.selectAll('g').data(vNodes).enter().append('g'); // Draw sunburst vSlices.append('path') .attr('display', function (d) { return d.depth ? null : 'none'; }) .attr('d', vArc) .style('stroke', '#fff') .style('fill', function (d) { return vColor((d.children ? d : d.parent).data.id); }); // Add text vSlices.append('text') .filter(function(d) { return d.parent; }) .attr('transform', function(d) { return 'translate(' + vArc.centroid(d) + ')rotate(' + computeTextRotation(d) + ')'; }) .attr('dx', '-20') .attr('dy', '.5em') .text(function(d) { return d.data.id }); } /** * Calculate the rotation for each label based on its location in the sunburst. * @param {Node} d - the d3 note for which we're computing text rotation * @return {Number} the value that should populate the transform: rotate() statement */ function computeTextRotation(d) { var angle = (d.x0 + d.x1) / Math.PI * 90; // Avoid upside-down labels return (angle < 120 || angle > 270) ? angle : angle + 180; // labels as rims //return (angle < 180) ? angle - 90 : angle + 90; // labels as spokes } </script>
비교하기