최신 JavaScript 및 D3을 통한 대화식 데이터 시각화
이 기사에서는 최근에 제작 한 예제 프로젝트를 통해 D3 라이브러리를 사용하여 완전히 독창적으로 시각화 유형의 시각화 유형을 살펴보고 싶습니다.이 구성 요소는 D3를 만드는 방법을 보여줍니다. 배울 수있는 훌륭한 도서관.
D3는 데이터 중심 문서를 나타냅니다. 모든 종류의 훌륭한 데이터 시각화 및 차트를 만드는 데 사용할 수있는 JavaScript 라이브러리입니다.
가 거의 일정하게 유지되었지만, 직원 당 생산성은 급등했습니다. 실제로 얇은 슬라이스 및 가 사람들이 전반적으로 덜 얻는 것이 가능합니다. .
이 데이터를 시각화하기위한 첫 번째 아이디어는 다음과 같습니다.
가 더 큰 를 얻을 수 있다는이 메시지를 집에 망치고 싶었습니다. 그것의 더 작은 가 발생할 수 있습니다. 이제 내 생각을 가지고 있었으므로 이제 D3로 구축 할 시간이었습니다.
를 뱉어 내면.
그런 다음 아크를 그리는 데 사용할 수있는 경로 생성기를 정의해야합니다. Path Generator를 사용하면 웹 브라우저에서 Path SVG를 그릴 수 있습니다. D3이 실제로하는 모든 일은 화면의 모양과 데이터를 연결하는 것이지만이 경우 단순한 원이나 사각형보다 더 복잡한 모양을 정의하려고합니다. Path SVGS는 선을 그려야 할 경로를 정의하여 작동하며, D 속성으로 정의 할 수 있습니다.
.
.
를 포함합니다.
다음으로, 우리는 데이터 배열에 여전히 존재하는 화면의 모든 SVG를 업데이트하고 있습니다. 우리는 여기에 D3 라이브러리의 환상적인 기능인 전환을 추가하고 있습니다. .
.
마지막으로, update () 함수는 이전 데이터 배열에 있지 않은 새로운 요소를 추가해야합니다.
프로젝트
.
더 나은
. 그러나 우리가 볼 수 있듯이, 파이가 더 커지는 것은
차용 코드
<that> 그래서, 이제 내가 무엇을 만들겠습니까? 이제이 프로젝트의 실제 고기에 들어가서 <em>를 작성해야합니다.
<that> 당신은 처음 몇 줄의 코드를 처음부터 작성하는 것으로 시작한다고 생각할 수도 있지만 잘못 될 것입니다. 이것은 D3이며 D3과 함께 일하기 때문에 항상 커뮤니티에서 사전 작성된 코드를 찾을 수 있습니다.
<completely> 우리는 완전히 새로운 것을 만들고 있지만 일반 파이 차트와 공통점이 많기 때문에 bl.ocks.org를 간단히 살펴 보았고 Mike Bostock 의이 클래식 구현으로 가기로 결정했습니다. D3의 제작자 중 하나. 이 파일은 이미 수천 번 복사되었을 것입니다. 글을 쓴 사람은 JavaScript를 가진 실제 마법사이므로 이미 멋진 코드 블록으로 시작하고 있는지 확인할 수 있습니다. </completely></that></em>.
이 파일은 D3 V3로 작성되었으며, 버전 5가 지난 달에 마침내 출시되었으므로 현재 두 가지 버전입니다. D3 v4의 큰 변화는 라이브러리가 평평한 네임 스페이스를 사용하여 전환하여 d3.scale.ordinal ()과 같은 스케일 기능이 대신 d3.scaleordinal ()처럼 쓰여진다는 것입니다. 버전 5에서 가장 큰 변화는 데이터 로딩 기능이 이제 약속으로 구성되어 여러 데이터 세트를 한 번에 쉽게 처리 할 수 있다는 것입니다.
혼란을 피하기 위해 이미 BlockBuilder.org에서 저장 한이 코드의 업데이트 된 v5 버전을 만드는 데 어려움을 겪었습니다. 또한 ES5 익명 함수를 화살표 함수로 전환하는 것과 같은 ES6 컨벤션에 맞게 구문을 변환했습니다.
<we> 우리가 이미 시작한 내용은 다음과 같습니다
<em> </em>
그런 다음이 파일을 작업 디렉토리에 복사하여 내 컴퓨터의 모든 것을 복제 할 수 있는지 확인했습니다. 이 튜토리얼을 직접 따르고 싶다면 Github Repo 에서이 프로젝트를 복제 할 수 있습니다. 파일 Starter.html에서 코드로 시작할 수 있습니다. 이 코드를 실행하려면 서버 (예 :이 코드와 같은)가 필요합니다. 후드 아래에서 데이터를 검색하기 위해 Fetch API에 의존하는 것처럼.
<you>이 코드가 어떻게 작동하는지에 대한 간단한 요약을 알려 드리겠습니다. </you></we></that>
우리 코드를 걷는다
<we> 먼저 파일 상단에 몇 가지 상수를 선언하고 있으며, 이는 파이 차트의 크기를 정의하는 데 사용할 것입니다.
<h2>
<code> 이것은 코드를 더 크거나 작게 만들고 싶다면 여기에서 이러한 값을 바로 변경하는 것에 대해 걱정하면됩니다.
.다음으로 SVG 캔버스를 화면에 추가하고 있습니다. SVG에 대해 잘 모른다면 캔버스를 페이지의 공간으로 생각할 수 있습니다. 이 영역 밖에서 SVG를 그려 보려고한다면 화면에 단순히 나타나지 않습니다.
<span>const width = 540;
</span><span>const height = 540;
</span><span>const radius = Math.min(width, height) / 2;
</span>
<span>const svg = d3.select("#chart-area")
</span> <span>.append("svg")
</span> <span>.attr("width", width)
</span> <span>.attr("height", height)
</span> <span>.append("g")
</span> <span>.attr("transform", <span>`translate(<span>${width / 2}</span>, <span>${height / 2}</span>)`</span>);
</span>
<span>const width = 540;
</span><span>const height = 540;
</span><span>const radius = Math.min(width, height) / 2;
</span>
<span>const svg = d3.select("#chart-area")
</span> <span>.append("svg")
</span> <span>.attr("width", width)
</span> <span>.attr("height", height)
</span> <span>.append("g")
</span> <span>.attr("transform", <span>`translate(<span>${width / 2}</span>, <span>${height / 2}</span>)`</span>);
</span>
<span>const color = d3.scaleOrdinal(["#66c2a5", "#fc8d62", "#8da0cb","#e78ac3", "#a6d854", "#ffd92f"]);
</span>
<span>const width = 540;
</span><span>const height = 540;
</span><span>const radius = Math.min(width, height) / 2;
</span>
이 코드 블록은이 업데이트 기능이 처음 실행되는 각 아크의 초기 위치를 설정합니다. Enter () 메소드는 화면에 추가 해야하는 데이터의 모든 요소를 제공 한 다음 각 요소를 Att () 메소드로 고리하여 각 각각의 충전 및 위치를 설정할 수 있습니다. 아크. 우리는 또한 각 아크에 흰색 테두리를주고 있으며, 이는 차트가 약간 깔끔해 보입니다. 마지막으로, 우리는이 각 호의 데이터를 데이터의 항목의 초기 값으로 설정하는데, 이는 Arctween () 함수에서 사용하는 데이터의 초기 값으로 설정하고 있습니다.
<you> D3에서 상당히 발전된 주제이므로 이것이 어떻게 작동하는지 정확히 따를 수 없다고 걱정하지 마십시오. 이 도서관의 가장 큰 장점은 강력한 내용을 만들기 위해 모든 내부 작업을 알 필요가 없다는 것입니다. 변경해야 할 비트를 이해할 수있는 한 완전히 필수적이지 않은 세부 사항을 추상화하는 것은 좋습니다.
<us> 그 과정의 다음 단계로 우리를 데려옵니다… <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>const svg = d3.select("#chart-area")
</span> <span>.append("svg")
</span> <span>.attr("width", width)
</span> <span>.attr("height", height)
</span> <span>.append("g")
</span> <span>.attr("transform", <span>`translate(<span>${width / 2}</span>, <span>${height / 2}</span>)`</span>);
</span></pre><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div>
<code code> 코드 적응
<have> 이제 우리는 지역 환경에 코드가 있었고 그것이 무엇을하고 있는지 이해하기 때문에 우리가보고있는 데이터를 전환하여 관심있는 데이터와 함께 작동하도록합니다. . <data> 프로젝트의 데이터/ 폴더에서 작업 할 데이터를 포함 시켰습니다. 이 새로운 incomes.csv 파일은 이번에는 CSV 형식이므로 (Microsoft Excel을 사용하여 열 수있는 파일의 종류) D3.JSON 대신 D3.CSV () 함수를 사용하겠습니다. ) 함수 : <p>
</p>
이 기능은 기본적으로 d3.json ()과 동일합니다. 데이터를 사용할 수있는 형식으로 변환합니다. 또한 유형 () 이니셜 라이저 기능을 두 번째 인수로 제거하고 있습니다. 왜냐하면 그것은 우리의 기존 데이터에만 해당 되었기 때문입니다. <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>const width = 540;
</span><span>const height = 540;
</span><span>const radius = Math.min(width, height) / 2;
</span></pre><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div>.
<a> d3.csv 콜백의 상단에 console.log (data) 명령문을 추가하면 다음과 같이 작업중인 데이터의 모양을 볼 수 있습니다.
<p>
<arr> 우리는 50 개의 항목 배열이 있으며, 각 항목은 데이터에서 1 년을 나타냅니다. 매년, 우리는 5 개의 소득 그룹 각각에 대한 데이터와 다른 몇 가지 분야의 데이터와 함께 객체를 가지고 있습니다. 이 몇 년 동안 파이 차트를 만들 수 있지만 먼저 데이터 주위를 약간 섞어 올바른 형식이되도록해야합니다. D3와 함께 데이터 조인을 작성하려면 각 항목이 SVG에 연결되는 배열로 전달해야합니다.
<in> 마지막 예에서는 화면에 표시하고 싶은 모든 파이 슬라이스에 대한 항목이있는 배열이 있음을 기억하십시오. 이것을 현재 우리가 가지고있는 것과 비교하십시오. 이것은 우리가 그릴 각 파이 슬라이스를 나타내는 1 ~ 5의 키를 가진 객체입니다. </in></arr></p>.
이 문제를 해결하려면 이전에 가지고 있던 type () 함수를 대체하기 위해 readata ()라는 새 함수를 추가하여 데이터의 모든 항목을로드 할 때 반복 할 것입니다.
<p>
매년이 함수는 값 배열이있는 객체를 반환하고 데이터 조인에 전달됩니다. 우리는 이러한 각 값을 이름 필드로 라벨링하고 있으며 이미 가지고있는 소득 가치에 따라 수치 가치를 제공하고 있습니다. 우리는 또한 비교를 위해 매년 평균 소득을 추적하고 있습니다. </p>
이 시점에서 우리는 다음과 같이 작업 할 수있는 형식의 데이터를 가지고 있습니다.
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>const svg = d3.select("#chart-area")
</span> <span>.append("svg")
</span> <span>.attr("width", width)
</span> <span>.attr("height", height)
</span> <span>.append("g")
</span> <span>.attr("transform", <span>`translate(<span>${width / 2}</span>, <span>${height / 2}</span>)`</span>);
</span></pre><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div>
<off> 데이터에서 첫 해에 차트를 생성하여 시작하겠습니다. 그런 다음 나머지 몇 년 동안 업데이트 할까 걱정됩니다. <p>.
현재, 우리의 데이터는 2015 년에 시작하여 1967 년에 종료되므로 다른 일을하기 전에이 배열을 반전시켜야합니다.
</p>
<normal> 일반 파이 차트와 달리 그래프의 경우 각 아크 각도를 고정하고 시각화 업데이트로 반경을 변경하려고합니다. 이렇게하려면 파이 레이아웃에서 값 () 메소드를 변경하여 각 파이 슬라이스가 항상 동일한 각도를 얻도록합니다.<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><span>const width = 540;
</span><span>const height = 540;
</span><span>const radius = Math.min(width, height) / 2;
</span></pre><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div>
<ll> 다음은 시각화가 업데이트 될 때마다 반경을 업데이트해야합니다. 이를 위해서는 사용할 수있는 규모를 제시해야합니다. 스케일은 D3의 함수로서 두 값 사이에서 를 가져 오는 기능입니다. 범위로. 우리가 사용할 규모는 다음과 같습니다
<em>
<this> 우리는 데이터에 액세스 하자마자이 척도를 추가하고 있으며, 우리의 입력은 지난해 가장 부유 한 그룹의 수입 인 데이터 세트에서 0에서 가장 큰 데이터 세트 사이에 있어야한다고 말하고 있습니다. 우리의 데이터에서 (데이터 [49] .Values [4] .Value). 도메인의 경우 출력 값이.
<an> 이것은 0의 입력이 우리에게 픽셀 값을 제공해야하며, 데이터에서 가장 큰 값의 입력은 우리에게 너비 또는 높이의 절반의 값을 제공해야한다는 것을 의미합니다. >
우리는 여기에서 </an></this></em> 제곱 루트 스케일 <em>를 사용하고 있음을 알 수 있습니다. 우리 가이 작업을 수행하는 이유는 파이 슬라이스의 영역이 반경이 아닌 각 그룹의 소득에 비례하기를 원하기 때문입니다. area = πr </em> 2 이므로이를 설명하기 위해 제곱근 스케일을 사용해야합니다.
<use> 그런 다음이 척도를 사용하여 update () 함수 내에서 아크 생성기의 외부 값을 업데이트 할 수 있습니다.
</use></ll></normal></off></a></data></have>
<span>const svg = d3.select("#chart-area") </span> <span>.append("svg") </span> <span>.attr("width", width) </span> <span>.attr("height", height) </span> <span>.append("g") </span> <span>.attr("transform", <span>`translate(<span>${width / 2}</span>, <span>${height / 2}</span>)`</span>); </span>
우리는이 시간에 타이머를 설정하고 200ms 마다이 코드는 step () 함수를 실행하여 내년 데이터로 차트를 업데이트하고 타이머를 1 씩 증가시킬 것입니다. 타이머 인 경우 타이머를 증가시킵니다. 49의 값 (데이터에서 작년)이되면 자체적으로 재설정됩니다. 이것은 이제 우리에게 지속적으로 실행되는 멋진 루프를 제공합니다 :
일반 업데이트 패턴
.
.
물건을 좀 더 유용하게 만듭니다. 또한 원시 인물을 제공하는 몇 가지 레이블을 추가하겠습니다. 파일 본문의 모든 HTML 코드를 다음과 같이 바꾸겠습니다.
<span>const width = 540;
</span><span>const height = 540;
</span><span>const radius = Math.min(width, height) / 2;
</span>
<span>const svg = d3.select("#chart-area")
</span> <span>.append("svg")
</span> <span>.attr("width", width)
</span> <span>.attr("height", height)
</span> <span>.append("g")
</span> <span>.attr("transform", <span>`translate(<span>${width / 2}</span>, <span>${height / 2}</span>)`</span>);
</span>
<span>const color = d3.scaleOrdinal(["#66c2a5", "#fc8d62", "#8da0cb","#e78ac3", "#a6d854", "#ffd92f"]);
</span>
<span>const width = 540;
</span><span>const height = 540;
</span><span>const radius = Math.min(width, height) / 2;
</span>
위 내용은 최신 JavaScript 및 D3을 통한 대화식 데이터 시각화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.
