今回は、単一ドーナツチャートの作り方について紹介していきます。
以前にも、ドーナツチャートの作り方については取り扱いました。その際は、2つの円グラフを組み合わせることで作成したかと思います。今回は、別の方法でドーナツチャートを作成してみます。最近、sin、cosなどの三角関数を用いることが少しずつ増えてきましたが、三角関数を利用します。
作り方の特性上、1つのデータに対して1つのドーナツチャートを作成することになるため、単一ドーナツチャートという名前としています。今回は、とある会社のカテゴリー別売上を単一ドーナツチャートで表現していきます。
では、作り方の説明をはじめていきましょう。
単一ドーナツチャートの元データ
もととなるデータは以下のような項目のファイルになります。
具体的には、以下のようなファイルであり、このファイルをデータソースとして指定します。
- 1列目:Category
- 2列目:Path
- 3列目:Value
Category | Path | Value |
---|---|---|
Furniture | 1 | 450 |
Furniture | 101 | 450 |
Office Supplies | 1 | 350 |
Office Supplies | 101 | 350 |
Technology | 1 | 200 |
Technology | 101 | 200 |
「Category」には、カテゴリーの名前が入ります。
「Value」には、全体を1000としたときの各カテゴリーの割合を入れます。例えば、「Furniture」のカテゴリーの場合、45%であり、450(=1000×45%(0.45))を入れます。
各カテゴリーに対して、2行のデータを用意し、「Category」「Value」には同じ値を指定します。
「Path」には、それぞれ、1と101が入ります。
ビンの作成
「Path」をもとに、以下のビンを作成します。
新しいフィールド名:Path (bin)
ビンのサイズ:1
これは、「Path」に、それぞれ、1と101を入れていますが、1から101の間を、サイズ1で分割することを意味します。
計算フィールドの作成
以下の計算フィールドを作成します。
名前:Index
INDEX()-1
「Index」は、 「Path (bin)」 の項番(0からはじまる)を示します。「Path (bin)」 は1から101の間をサイズ1で分割されているので、具体的には、0、1、2、・・・、100の項番となります。
名前:Max Value for Category
WINDOW_MAX(MAX([Value]))
「Max Value for Category」は、カテゴリーごとの「Value」の最大値を示します。「Value」には、カテゴリーごとに同じ値が入っているので、単純に「Value」の値になります。例えば、「Furniture」のカテゴリーの場合、450となります。
名前:Total Value
WINDOW_SUM(MAX([Value]))/2
「Total Value」は、各カテゴリーの 「Value」の合計、すなわち、1000を示します。2で割っているのは、各カテゴリーに対して、2行のデータを用意しているためです。
名前:Percentage
[Max Value for Category]/[Total Value]
「Percentage」は、全体に対する、各カテゴリーの「Value」の割合を示します。例えば、「Furniture」のカテゴリーの場合、「Percentage」は0.45(=450/1000)となります。
次に、ドーナツチャートを構成する計算フィールドについて説明するのですが、まず、その前に、イメージをざっくりと説明します。
ドーナツチャートは、以下の単位円(半径の長さが1である円)にて表現していきます。
Viz上で横軸をX座標に、縦軸をY座標とみたてると、(X,Y)=(sin(α),cos(α))となり、点をプロットし、それらの点をつなげていきます。
具体的には、以下のような計算式となります。
名前:Starting Point
(RUNNING_SUM([Percentage])-[Percentage])*360
「Starting Point」は、各カテゴリーの円上でプロットする開始位置(角度)を示します。
カテゴリー「Furniture」「Office Supplies」「Technology」の「Percentage」は、それぞれ、0.45、0.35、0.2となり、例えば、カテゴリー「Furniture」の「Starting Point」は、0度=(0.45-0.45)×360、360度=(0.45+0.35+0.2+0.45ー0.45)×360=0度、720度=(0.45+0.35+0.2+0.45+0.35+0.2+0.45ー0.45)×360=0度、・・・となります。
また、カテゴリー「Office Supplies」の「Starting Point」は、162度=(0.45+0.35ー0.35)×360、522度=(0.45+0.35+0.2+0.45+0.35ー0.35)×360=162度、822度=(0.45+0.35+0.2+0.45+0.35+0.2+0.45+0.35ー0.35)×360=162度、・・・となります。
名前:X
SIN(RADIANS((([Index]*[Percentage]*3.6))+[Starting Point]))
名前:Y
COS(RADIANS((([Index]*[Percentage]*3.6))+[Starting Point]))
Viz上の横軸をX軸、縦軸をY軸とみたとき、「X」はX座標を、「Y」はY座標を示します。
単位円は一周360度であり、カテゴリーごとに分割していきます。さらに、100個に分割して、それぞれ、点をプロットしていくイメージとなります。各点の間隔が「[Index]*[Percentage]*3.6」であり、各カテゴリーの最初の点をプロットする位置が「[Starting Point]」となります。
そして、SIN関数、および、COS関数の引数は、ラジアン単位にする必要があり、RADIANS関数をはさんで、度単位からラジアン単位に変換しています。
ワークシートの編集
次の流れでワークシートを編集していきます。
- マークタイプを「線」に変更します。
- 「Path (bin)」をマークパネルのパスに入れます。
- 「Category」をマークパネルの色に入れます。
- 「X」を列シェルフに入れます。
- 列シェルフにある「X」を右クリックして、「次を使用して計算」の「Path (bin)」を選択します。
- 「Y」を行シェルフに入れます。
- 行シェルフにある「Y」を右クリックして、「次を使用して計算」の「Path (bin)」を選択します。
- 列シェルフにある「X」を右クリックして、「表計算の編集」を選択します。
- 表計算画面が表示されるので、ネストされた計算にて「Start Point」を選択します。
- 次を使用して計算にて「特定のディメンション」を選択し、「Path (bin)」と「Category」にチェックを入れた状態にします。
- ネストされた計算にて「Total Value」を選択します。
- 次を使用して計算にて「特定のディメンション」を選択し、「Path (bin)」と「Category」にチェックを入れた状態にします。
- 列シェルフにある「Y」を右クリックして、「表計算の編集」を選択します。
- 表計算画面が表示されるので、ネストされた計算にて「Start Point」を選択します。
- 次を使用して計算にて「特定のディメンション」を選択し、「Path (bin)」と「Category」にチェックを入れた状態にします。
- ネストされた計算にて「Total Value」を選択します。
- 次を使用して計算にて「特定のディメンション」を選択し、「Path (bin)」と「Category」にチェックを入れた状態にします。
ワークシートの微調整
次の流れでワークシートの微調整をしていきます。
- 列シェルフにある「X」を右クリックして、「ヘッダーの表示」のチェックを外します。
- 行シェルフにある「Y」を右クリックして、「ヘッダーの表示」のチェックを外します。
- Viz上で右クリックして、「書式設定」を選択します。
- 線の書式設定にて、シートのグリッド線、および、ゼロラインを「なし」に設定します。
- 「Percentage」をマークパネルのツールヒントに入れます。
- マークパネルのツールヒントにある「Percentage」を右クリックして、「書式設定」を選択します。
- 書式設定:集計(Percentage)にて、ペインの既定の数値を「パーセンテージ」に変更します。
- マークパネルにて、ツールヒントの「ツールヒントの編集」を開き、以下の通りに入力します。
Category: <Category>
Percentage: <集計(Percentage)>
- マークパネルのサイズを左クリックして、サイズを調整します。
- シートの名前を「カテゴリー別売上 単一ドーナツチャート」に変更します。
単一ドーナツチャートの完成
これで、カテゴリー別売上の単一ドーナツチャートが完成です。
Tableau Publicのリンクを貼っています。
なお、以前、紹介したドーナツチャートの作り方は、以下になります。