こんにちは。AG-Boost事業部開発部の宇野です。最近「Recharts」というグラフを簡単に描けるライブラリを使用する機会がありました。色々とカスタマイズできるのですが公式ドキュメントを見てもピンとこない点があったりしました。中でもX,Y軸をカスタマイズする辺りで悩んだ部分をまとめてみようと思います。 サンプルはAreaChartという面グラフを使用してます。
特にカスタマイズしていないコードとその画像
const data = [ { month: 1, '売上': 100000, '目標': 200000 }, { month: 2, '売上': 400000, '目標': 300000 }, { month: 3, '売上': 300000, '目標': 400000 }, { month: 4, '売上': 800000, '目標': 500000 }, { month: 5, '売上': 200000, '目標': 600000 }, { month: 6, '売上': 300000, '目標': 800000 }, ]; return ( <AreaChart width={600} height={400} data={data} > <XAxis dataKey="month" /> <YAxis yAxisId={1} /> <Area yAxisId={1} dataKey="売上" /> <Area yAxisId={1} dataKey="目標" /> </AreaChart> );
これだけでこんなグラフができます。
XAxis / YAXis コンポーネント
グラフのX軸、Y軸のことです。
orientation
Y軸を右に表示させたい場合の例です。
<YAxis yAxisId={1} orientation="right" />
tickCount
軸の数を決めれるやつです。今回はY軸の数を3本にしたいと思います。
<YAxis yAxisId={1} orientation="right" tickCount={3} />
tick
軸のstyleを指定できたりします。
<YAxis yAxisId={1} orientation="right" tickCount={3} tick={{ fontSize: 18, fontWeight: 700, fill: 'red' }} />
tickMargin
軸にmarginを指定できます。軸とキーの間に余白ができます。
<YAxis yAxisId={1} orientation="right" tickCount={3} tick={{ fontSize: 18, fontWeight: 700, fill: 'red' }} tickMargin={20} />
width
軸の幅を指定できます。キーが長すぎると文字が見切れるのでこれで調整します。
<YAxis yAxisId={1} orientation="right" tickCount={3} tick={{ fontSize: 18, fontWeight: 700, fill: 'red' }} tickMargin={20} width={100} />
tickLine
軸の表示を指定できます。今回は非表示にしてみます。
<YAxis yAxisId={1} orientation="right" tickCount={3} tick={{ fontSize: 18, fontWeight: 700, fill: 'red' }} tickMargin={20} width={100} tickLine={false} />
axisLine
下記だとY軸のベースの線の表示を指定できます。こちらも非表示にしてみます。
<YAxis yAxisId={1} orientation="right" tickCount={3} tick={{ fontSize: 18, fontWeight: 700, fill: 'red' }} tickMargin={20} width={100} tickLine={false} axisLine={false} />
tickFormatter
軸のキーのところの表示をカスタムできます。今回はカンマと¥マークを先頭につけたいと思います。
<YAxis yAxisId={1} orientation="right" tickCount={3} tick={{ fontSize: 18, fontWeight: 700, fill: 'red' }} tickMargin={20} width={100} tickLine={false} axisLine={false} tickFormatter={value => `¥${value.toLocaleString()}`} />
おまけ
面グラフの面部分の色をグラデーションカラーにさせてみたいと思います。 defsタグでグラデーションを作成してそのidをAreaコンポーネントにサンプルの場合だとfill="url(#areaColor)"と書くと実現できます。
<defs> <linearGradient id="areaColor" x1="0" y1="0" x2="0" y2="1"> <stop offset="0%" stopColor="red" stopOpacity={1} /> <stop offset="100%" stopColor="yellow" stopOpacity={0} /> </linearGradient> </defs> <Area yAxisId={1} dataKey="売上" fill="url(#areaColor)" />
最後に
今回はXAxis、YAxisコンポーネントの割と使いそうな部分と悩んだ部分をまとめてみました。 他にも色々なコンポーネントがあってカスタマイズできる部分があるのでみなさんも色々試してみてください!