【Tableau】マークレイヤーを活用した3重円グラフ作成方法（地理的レイヤー）

## 目次
[1．はじめに](#1はじめに)
[2．ドーナツチャートの考え方](#2ドーナツチャートの考え方)
[3．3重円グラフの作成（マークレイヤーの活用）](#33重円グラフの作成マークレイヤーの活用)
[4．まとめ](#4まとめ)

## 1．はじめに
今回は[workout-wednesday 2022 – WEEK 49: Can you make a pie chart?](https://www.workout-wednesday.com/wow2022w49/) でも登場した、マークレイヤー機能を用いた3重円グラフの作成方法を解説します。
「[ドーナツチャート](https://kb.tableau.com/articles/issue/creating-donut-charts?lang=ja-jp)の様に2つ重ねることはできるけど、3重ってどうやるの！？」という方向けにまとめましたので、お役に立てば幸いです。

## 2．ドーナツチャートの考え方
サンプルスーパーストアのデータを用いて、カテゴリごとの売上を表すドーナッツチャートを作成してみます。
まずカテゴリを色に、売上を角度とすることで、以下の様な円グラフが出来ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/10d87f53-01b5-50d7-1ff0-41c1acc93177.png)
円グラフができたので、続いて二重軸について考えます。
普段棒グラフなどで二重軸を作成するとき、二つのメジャーを重ねるのに「軸」を用いています（売上/利益など）。異なる軸を持つメジャーの軸を重ねることで、グラフを重ねて見せていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/e3ca0614-78ab-aa5f-f682-8cd5e245a123.png)
しかし、円グラフにおいては列・行にディメンションもメジャーも入っておらず、先ほどの「売上」「利益」の様な、二重軸をつくるために必要な「軸」が存在していません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/89248d3e-427b-4ac1-6d51-495bc2475555.png)
そのため円グラフを2重軸にするためには基準となる「軸」を設定する必要があります。
そこで以下の様に値を設定し軸とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/3cb46854-1a26-6124-b992-e2fd3be22f99.png)
「1」とは何ぞ…と思われるかもしれませんが、重要なのは「共通の軸」と「その軸上の同じ値を持っていること」です。
「1」という値を基準として共有することで、軸を重ねても同じプロット（y軸）上に円グラフを重ねることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/151f4db1-02f1-ffb7-0faf-b3b06bf84572.png)
あとは2つ目の円グラフのマークタイプを「円」に変更し、色・サイズを調整することで以下の様なドーナツチャートが作成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/969eb046-26b9-6159-43d2-734cfc1db746.png)

## 3．3重円グラフの作成（マークレイヤーの活用）
では同じように3つ目の軸をもう一つ追加し重ねればいいか…と言うと、実はそうではありません。
円グラフと棒グラフ・線グラフなどのグラフとの違いを理解する必要があります。

棒グラフ・線グラフの場合、異なる3つのメジャー(売上、利益、利益率など)を、メジャーバリューと二重軸の機能を用いて重ねることができます。
これはそれぞれのメジャーに数値としての意味（y軸上の値）があり、列のメジャーorディメンション（x軸上の値）に対して値をプロット可能なためです。


しかし円グラフにおいて軸として用いている数値はあくまでプロット位置を指定する"点"であり、その値自体に意味があるわけではないため、軸の値をいくら重ねても円グラフを重ねることができないということになります。


ではどのようにすれば円グラフを三つ重ねることができるか。
ここで<font color="DarkOrange">**「マークレイヤー」**</font>を使います。

マークレイヤーはマップを複数重ねることができる機能です。
<font color="MediumBlue">**透明なシートのように重ね合わさり、各レイヤーごとに独立した設定（マークタイプ、色など）を行うことが可能**</font>です。
座標としてとらえると、緯度経度を(x軸,y軸)として表現される平面のマップをz軸上に重ねるイメージです。
（パイ生地のように層になっているイメージです、パイチャートだけに…）
<font color="MediumBlue">**注：マーク レイヤーは地理的データでのみ使用できます**</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/555d7f8b-7646-bfb7-cdae-e0103fcc54f2.png)
ドーナツチャートでは「1」という値をプロット位置として2つの円グラフを重ねましたが、マークレイヤーではマップの中心である原点（x,y）=（0,0）を指定します。
MAKEPOINTという空間関数を用いて、緯度列および経度列のデータを空間オブジェクトに変換します。
MAKEPOINT を使用すると、データ ソースを空間的に有効化し、空間結合を使用している空間ファイルと結合することができます。
なおMAKEPOINT を使用するには、データに緯度と経度の座標を含める必要があるので要注意です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/0ddbc1d3-11f9-e6ef-4bed-66ad22a13545.png)
※「緯度」「経度」を0と指定する計算式を作成することで、イメージが付きやすいかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/a71f1d41-8250-5e09-6635-9f7051150c33.png)

続いて作成した空間関数の計算式で作成した地理的フィールド「座標指定」をキャンバスにドラッグします。
すると以下のようにマップ上の(緯度,経度)＝(0,0)の位置に、小さな点がプロットされたことがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/d5ffa414-b580-c34c-540a-4c136f0e00ed.png)
円グラフを作成すると以下のようになります。
**※最初はめちゃくちゃ小さい円グラフが出てきますが、「Shift+Ctrl+B」で拡大できますので調整してみてください！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/5f304db3-2594-52b0-ec19-cbbe65fab37a.png)

この状態でさらに「座標指定」をビューにドラッグします。（今回は3層にするために2回行います）
すろと[マーク レイヤーの追加] コントロールがビューの左上隅に表示されますので、[マーク レイヤーの追加] に地理的フィールドをドロップします。
新しいマーク レイヤーが [マーク] カードに追加され、そのレイヤーがビューに表示されます。
これにより、マップを3層重ねることができました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/5b99c0ce-8e4f-e048-56e7-26e911e61a32.png)

今回はバックグラウンドマップは不要ですので、以下の手順で「なし」に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/94f22acb-5c39-0eed-76da-86c07a427ad5.png)
以下のような状態になりました。
（ドーナツチャート作成時と同様に2つ目の円グラフはマークタイプを「円」に変更しています。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/bcacfae9-44a1-7813-5509-dc5bdd0254e7.png)
このままだと3つの円グラフと円の大きさが全く一緒ですので、色やサイズを調整します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/861d8404-d084-1393-476c-803b8e28a31e.png)
最後に細かい調整として「ヘッダーを非表示」、書式設定でグリッド線・ゼロラインを「なし」に設定し、完成です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087200/a781c430-e1f2-1b9d-99ef-52725c45b1c0.png)

## 4．まとめ
マークレイヤーについて解説しました。
今回は派生形の使い方として円グラフを3重にしてみましたが、いかがでしょうか。
座標指定などはあくまで私の解釈ですので、いろいろ調べるきっかけにしていただければと思います。（間違い等ございましたらご指摘いただけますと幸いです…!!）
またバックグラウンドマップを「なし」にしなければ、マップ上の表記を何重にも重ねることができます。
このマップレイヤー機能、かなり使える機能かと思いますのでご参考になれば幸いです。