Tableau で3Dプロットをしてみた２（塗りつぶしVer.）

# はじめに

この記事は [Ateam LifeDesign Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ateam-life-design) の 8日目の記事です。

[前回の記事](https://qiita.com/hironey/items/27f6464fb1c94fcc1791
)で、三次元座標を Tableau 上の二次元座標にプロットをする、というのをやってみましたが、そこで実現できなかったことを改めてチャレンジします。

具体的には、手前のプロットを優先して描画することで、奥にある重なっている点を見えなくして、立体をよりうまく表現したい、というものです。前回は意図しないものが前方に来てしまいうまくできなかった。
それができれば、塗りつぶすことで、スカスカの点描画ではなく面で表現できて、Excel の等高線っぽくなるはず…

ではいきましょう。

# 方針

前回は、h,v 座標をディメンションとして表示していましたが、それが原因で並び替えがうまくいっていなかったようです。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/69287cec-4fca-260b-3a7e-153a4686b2ce.png">

元データ（x,y座標値）の各行に番号（ID）を振って、それぞれのデータを個別に扱えるようにして、そのIDを並び替えてみます。

# データ準備

前回の入力データである data.csv は、-2.0〜2.0 までの x,y 列だけでしたが、これに行番号（＝ID）を付けたものを用意します。

```data.csv
1,-2.0,-2.0
2,-2.0,-1.9
3,-2.0,-1.8
・・・
1679,2.0,1.8
1680,2.0,1.9
1681,2.0,2.0
```

これを Tableau でテキストファイルとして読み込みます。

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/ab3d1145-9ca7-6242-409c-d740fbd6e39c.png">

フィールド名は、ID,x,y としておきます。

z は前回同様、2次元のガウス関数で `EXP(-SQUARE([x])-SQUARE([y]))*3` としました。

x,y,z 座標を Tableau 上の h,v 座標、および奥行き d に投影する方法については[前回記事](https://qiita.com/hironey/items/27f6464fb1c94fcc1791#tableau-%E3%81%A7%E6%8F%8F%E7%94%BB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB-2%E6%AC%A1%E5%85%83%E3%81%AE%E5%BA%A7%E6%A8%99%E3%81%AB%E8%90%BD%E3%81%A8%E3%81%97%E8%BE%BC%E3%82%80)を参考にしてください。

# 見た目の調整

前回は、メジャー項目である h,v を散布図として散らすためにディメンションにしていましたが、今回は、h,v はメジャーのまま、ID を「詳細」に入れることで独立した点として描画します。

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/7949c14f-732b-4d5b-ab24-fdfba215c421.png">

次に、本来（投影前の）の高さである z を「色」に入れて、
軸の範囲を固定、ヘッダーを非表示すれば前回と同様な見た目まではいきました。
（今回は塗りつぶすので、奥行き d によるサイズ連動は必要ありません）

（下記のスクショは θ、φ をいじって回転させています）

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/68ddba34-c4db-9985-cffa-bc9376e2d036.png">

ここで、マークの種類を「円」にして、サイズを大きくしてあげると塗りつぶされました！
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/3cefcbd0-ea2b-1e59-79e8-0239ac3f16fd.png">

おぉ、っぽい。
等高線というにはちょっとギザギザ…
プロットする点（円）が表面積に対して均等ではないので、ギザギザになってしまうのだと思われる。
散布図的に描画してたときにはステップドカラーにした方が見やすかったけど、ギザギザが気になりすぎるので、ステップをやめてみる。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/8a35c4ff-4347-9f5d-3afd-8d6f2bcc99ba.png">

こっちの方がいいかな。

この状態で φ を増やして縦方向（手前方向）に回転していくと・・・

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/7f96bb09-4937-9e1f-f805-e3893e01f13e.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/60476b0e-2729-2a21-7c95-fddc143dc335.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/50bd8174-f8d3-1fa2-8d72-0d98d77944ba.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/7fa2da95-06dc-814c-27e9-b2e51c92b959.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/cb7e0ebc-69b3-76c3-734b-8410d0a1c6f5.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/aabff51e-78e4-4f5b-5660-0f7a073f64ca.png">

なんか変・・・
山が手前側にあったはずが、視点が真上になった後は、山が向こう側に行ってしまう…
回転しているというより、山が凹んでいくように見えてしまう…

プロットの順番が CSV ファイルにあった行の順に固定化されてしまっていることによるものだと思われます。

常に手前を優先して描画するために、ID を奥行き d で並び替えます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/5d65f63a-b183-2f9f-7e6a-d763d7e4046f.png">

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/f2315ec5-7347-a076-e365-d5b2ea5714f9.png">

山が手前に来てくれました！
（ちなみに、後で分かりましたが、この状態だと手前がマイナス、奥がプラスの方向になってしまっているので、
ID の並び順を d の降順にした方が良かったです）

さっきの初期状態から逆方向、上に回転しても自然な流れになりました。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/6b916e29-8d5c-07d0-3747-3d48e0cea8ee.png">


めでたしめでたし。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81599/8fd110d7-8401-1555-1f0c-8493219fa17f.png">

※上記はアニメーションになっていますが、動いていない場合はクリックしてみてください

# まとめ

元データの各行にユニークな番号を振り、h、v をメジャーのまま、その番号を「詳細」に入れて個別に散布図として表示することで、意図通りに描画順を指定でき、奥行きを表現することができました。


あとは、x,y,z軸の表現ができれば…
[次回](https://qiita.com/hironey/items/d9fdbf5bb714d3ed5261) に続きます。