メインコンテンツまでスキップ

Reactで始める情報可視化

· 約3分
白庄司 拓真
教材作成担当者

今回は、React, D3.jsの環境の導入を行います。

公式ページの始め方です。英語で書いてあるので難しいかもしれないです。
https://d3js.org/getting-started

ViteでReactの環境を導入する。​

公式ドキュメント
https://ja.vitejs.dev/

以下のコマンドで、Reactのテンプレートを作ることができます。
Viteは高速なビルドツールです。(早くReactを動かすことができる)

npm create vite@latest my-d3-app -- --template react

my-d3-appディレクトリに移動してください。

cd my-d3-app

最初に必要なパッケージをインストールしてください。

npm install

このコマンドを実行すると特に意味のないページが表示されます。
これが動けば正常に動いている常態です。

 npm run dev

d3.jsを使えるようにする。​

npm install d3

src内を以下のように変更してください。
LinePlot.jsxはファイルがないと思うので作成してください。

src/App.jsx
import * as d3 from "d3";
import { useState } from "react";
import LinePlot from "./LinePlot";

export default function App() {
const [data, setData] = useState(() => d3.ticks(-2, 2, 200).map(Math.sin));

function onMouseMove(event) {
const [x, y] = d3.pointer(event);
setData(data.slice(-200).concat(Math.atan2(x, y)));
}

return (
<div onMouseMove={onMouseMove}>
<LinePlot data={data} />
</div>
);
}
src/LinePlot.jsx
import * as d3 from "d3";

export default function LinePlot({
data,
width = 640,
height = 400,
marginTop = 20,
marginRight = 20,
marginBottom = 20,
marginLeft = 20,
}) {
const x = d3.scaleLinear(
[0, data.length - 1],
[marginLeft, width - marginRight],
);
const y = d3.scaleLinear(d3.extent(data), [height - marginBottom, marginTop]);
const line = d3.line((d, i) => x(i), y);
return (
<svg width={width} height={height}>
<path
fill="none"
stroke="currentColor"
strokeWidth="1.5"
d={line(data)}
/>
<g fill="white" stroke="currentColor" strokeWidth="1.5">
{data.map((d, i) => (
<circle key={i} cx={x(i)} cy={y(d)} r="2.5" />
))}
</g>
</svg>
);
}

これでとりあえず動く状態なはず!​

動作確認をしてみましょう。

npm run dev

ポートは変わっていたらそこは直してください。 http://localhost:5173/ にアクセスするとこのような画面が表示されます。 スクリーンショット 2024-06-03 11.37.20

これで一旦完成です自分で改造したりとか、 https://d3js.org/ を見て全く新しいものを作成しましょう。