TableauでRadial Bar Chartを作る


今回のテーマはRadial Bar Chartです。

以下のViz作成を通して解説します。


以下のブログを参考にしました。

https://interworks.com/blog/dhart/2013/12/19/its-your-round-at-the-bar/

使用したデータはMakeoverMonday 2019/W4から取得できます。

https://data.world/makeovermonday/2019w4

Tableauワークブックは以下からダウンロードできます。

https://public.tableau.com/profile/yoshitaka6076#!/vizhome/BlogRadialBarChart/RadialBarchart

【モチベーション】

まず、今回取り扱ったデータの説明をします。

このデータはイギリス首相官邸街周辺の、2017年の電力使用量に関するデータです。

今回は可視化の目的を「電力使用量が増えたタイミングはいつか」とします。


こういうデータを可視化する際に、最初はBar ChartかLine Chartになるのかなと思います。

仮に日付と時間、両方の粒度で見るとしたら、以下のようになるでしょうか。


この時点での問題点は「グラフの両端、中央にピークがあるのは分かる」ものの、一方で「これが何月何日頃なのか知るためには、頭の中で軸への補助線を引いて、その上で軸を読み解かないといけない」ことです。

もう一つの問題点は、データの粒度が細かすぎて、軸そのものを読み解くのが難しいことです。

こういう場合、以下2点が取りあえず解決策として思い浮かぶかなと。

1.Vizを分ける:例えば日別のワークシートと、時間別のワークシートを作成し、分けて見えるように設計する。

(フィルターアクション or セットアクション前提です)

2.Heat Mapを試してみる

(両方ともQuickに作ったものなので、細部は適当です)

1の設計だと、先に挙げた問題点2つが解消されている感じですね。電力使用量が多かった日の時間帯分布も見やすいです。

一方で以下の問題が発生します。

・ワークシート2つを必要とすることからスペースを要求すること、

・ダッシュボードアクション前提なので、静的にVizを作る必要がある場合は辛い。

そこでRadial Bar Chartで、データの並び方(横並びから円形並び)を変えることにより、省スペースかつ静的でも直感的にできます。


Radial Bar Chartを用いた場合、電力使用量のピークが何月何日ごろか一目瞭然です。

例えば6月20日ごろのピーク(Viz中央下段)は「データ点から軸に補助線を引いて、読み解く」ことなしに、一瞬で分かります。すぐそこにJunとJulって書いてあるので。

また時間のデータを「時計」のような形で表示できるので、「データのもつイメージ」を活用し、より「直感的」にVizを作成できます。

以上がRadial Bar Chartの一例です。

ちなみに「視覚的な印象」と「数値とイメージの紐づけ」の話は以下の記事でも触れていますので、ご参考まで。 Tableau Note: TableauでRadial Chartを作る

【Radial Bar Chartの作り方】

いつものように、Self-Unionです。


まず、以下の計算フィールドを用意します。

Measure

SUM([Electricity Used (kwH)])/COUNTD([Table Name])

DateTime

MAKEDATETIME([Date], [Time of day])

PATH

IIF([Table Name]="Energy Use Number 10 Downing St 2017.csv",0,1)

DateTimeは、データが別カラムでそれぞれ日と時間をもっていたので、まとめようというだけです。

PATHについては、今回の場合はUNIONしたテーブルに整数ラベルをつけよう、程度です。

今回の場合、DateTimeごとにRadial Barを作成したいので、そのための計算フィールドを作成します。

Minimum Granularity

[DateTime]

そして以下の計算式を作成します。

INDEX

INDEX() - 1 // Minimum Granularityを使用して計算

Length Normalized

[Radial Inner] // where line starts: base point + IIF( ATTR([PATH]) = 0 , 0 , [Measure] / WINDOW_MAX([Measure]) * ([Radial Outer] - [Radial Inner])

)

Angle (Radian)

[INDEX] / WINDOW_MAX([INDEX]) * 2 * PI()

+

RADIANS([Rotation (Degree)])

//Minimum Granularityを使用して計算

ここで、Radial Outer、Radial Inner、Rotation (Degree)はそれぞれパラメータです。

Length Normalizedについて。

Radial Inner/Outerは「Radial Barの始点/終点を円の中心からどのくらい離すか」のパラメータです。

[Measure] / WINDOW_MAX([Measure])により、Measureを[0,1]にスケーリングします。

そこに([Radial Outer] - [Radial Inner])をかけることにより、Radial Barの長さをコントロールしています。

Angle (Radian)について。

INDEX / WINDOW_MAX(INDEX())は、ざっくりと言えば「あるRadial Barの順番 / Radial Barの総数」です。

これに2π = 360°をかけることにより、全体に対する位置(rad)を出しています。

パラメータRotation (Degree)は「1番目のRadial Barをどこから始めるか」を制御します。今回の場合、12時方向を始点としたかったので、-90°にしています。

これら計算を利用して、以下の計算フィールドを作成します。

X

[Length Normalized] * COS(-[Angle (Radian)])

Y

[Length Normalized] * SIN(-[Angle (Radian)])

最後に、下図のように設定すれば完成です。

背景画像については、マップ→背景イメージを使用しています。

X、Yは±0.9で軸範囲を固定しています。



Radial Bar Chart作成方法、いかがでしたか。次回はRadial Stacked Bar Chartの作成方法についてを予定しています。

ご質問等はTwitter、Linkedinへよろしくお願いします。

#Tableau

© 2023 by Actor & Model. Proudly created with Wix.com