マリメッコ・チャートを作成する方法

こちらのノートでは、マリメッコ・チャートを作成する方法を紹介いたします。

マリメッコ・チャートはビジネス分析において非常に強力な可視化ツールで、「どのカテゴリーが大きいか」と「そのカテゴリーの内訳はどうなっているか」という2つの情報を1つのチャートで同時に表現します。

マリメッコ・チャートとは

マリメッコ・チャートは、モザイク・チャートとも呼ばれる、通常の積み上げ棒グラフと異なり、各列の高さの両方がデータを表します。

列の幅は各カテゴリーの合計量(例:売上規模)を、列の高さはそのカテゴリー内の構成比(例:顧客セグメントの割合)を示しています。

このチャートが特に威力を発揮するのは、市場規模と市場シェア、売上規模、カテゴリー比率など、数的な割合と大きさを同時に把握したい場面です。

例えば、製品サブカテゴリーを列として並べた場合、列幅が広いほどそのサブカテゴリーの売上が大きく、列内の色の面積がそのサブカテゴリーにおける顧客セグメントの比率を表します。

これにより「携帯電話は最も売上規模が大きいが、コンシューマー顧客への依存度が高い」「本棚は規模が小さいが、法人顧客の比率が突出して高い」といった洞察を一目で読み取ることができます。

一般的なバーチャートやパイチャートでは2度のチャートを見比べる必要がある情報を、1つのチャートにまとめられる点が最大の強みです。

マリメッコ・チャートに必要なデータ

マリメッコ・チャートを作成するときには、以下の3列から構成される集計済みのデータフレームを用意しておくと、Rスクリプトを使ってチャートを可視化する際、よりシンプルな記述ですみます。

  • 列カテゴリー(列幅を決める)
  • 内訳カテゴリー(列の高さを決める)
  • 数値(売上など)

なお、こちらのノートで使用するサンプルのデータは以下のリンクからダウンロードいただけます。

ライブラリのインストール

マリメッコ・チャートの作成にあたってはmarimekkoパッケージを利用します。

そんため、プロジェクトメニューから、Rパッケージの管理を選択します。

テキストボックスにmarimekkoとタイプし、インストールボタンをクリックします。

「marimekkoのインストールに成功しました。」というメッセージが表示されたら、OKボタンをクリックします。

これでマリメッコ・チャートを作成する準備が整いました。

マリメッコチャート用のデータを作成する

インポートした注文データは1行1注文の明細データです。

今回は、マリメッコ・チャートを作成するために、製品サブカテゴリーと顧客セグメントの組み合わせごとに売上を集計したうえで、各サブカテゴリー内での顧客セグメント比率を計算します。

この比率をあらかじめデータ側で計算しておくことで、Rスクリプトがよりシンプルになります。

1. 集計ステップを追加する

「製品サブカテゴリー」列のヘッダーをクリックし、表示されるメニューから「集計」を選択します。

集計ダイアログが開き、グループに「製品サブカテゴリー」が自動で設定された状態で表示されます。

2. グループと集計値を設定する

続いてグループ化に、「顧客セグメント」を追加します。

次に指標の設定欄で「売上」列を選択し、集計関数として「合計値(SUM)」を選びます。列名はそのまま「売上」で問題ありませんので、そのまま実行します。

3. 表計算で売上比率を追加する

集計後のデータフレームには、製品サブカテゴリーと顧客セグメントの組み合わせごとに売上が1行で表示されます。

続けて、各製品サブカテゴリー内でのセグメント比率を計算します。

「売上」列のヘッダーをクリックし、メニューから「表計算」、「…に対する比率」、「合計値」を選択します。

表計算のダイアログが開いたら、グループに「製品サブカテゴリー」を設定します。

グループを指定することで、全体ではなくサブカテゴリーごとの比率が計算されます。

続いて、値の列名の編集ボタンから列名を「売上比率」に変更し、「実行」をクリックしてください。

マリメッコ・チャートを作成するためのデータが作成できました。

マリメッコチャートを作成する

カスタム (R) チャートでマリメッコ・チャートを作成する

チャート・ビューからカスタム (R) チャートを使うと、Rのコードを貼り付けるだけでマリメッコ・チャートを作成できます。

そのため、チャート・ビューに移動し、チャートタイプの一覧から「カスタム (R) チャート」を選択します。

すると、Rスクリプトを入力するテキストエディタが表示されます。

Rスクリプトを貼り付けて実行する

続いて、以下のスクリプトをテキストエディタに貼り付けてください。${DATA} はExploratoryが現在アクティブなデータフレームを自動的に参照する専用の記法です。

library(ggplot2)    
library(marimekko)  
library(dplyr)      
library(scales)     

# ── Step 1: マリメッコチャートのベースプロットを生成 ──────────────────────────

p_base <- ggplot(${DATA}) +
  geom_marimekko(
    aes(fill = 顧客セグメント,                      # 色分けの基準列
        weight = 売上),                           # 列幅・高さの計算に使う数値列
    formula = ~ 製品サブカテゴリー | 顧客セグメント    # 左辺 = 列幅の軸、右辺 = 積み上げの軸
  )

# ── Step 2: 各ブロックの中心座標を計算し、ラベル用データを作成 ────────────────

label_data <- ggplot_build(p_base)$data[[1]] %>%   # geom_marimekko が内部計算した座標情報を取得
  mutate(
    xmid = (xmin + xmax) / 2,                       # ブロックの X 方向中心
    ymid = (ymin + ymax) / 2                        # ブロックの Y 方向中心
  ) %>%
  bind_cols(
    ${DATA} %>%
      arrange(製品サブカテゴリー, 顧客セグメント) %>%    # 座標データの行順に合わせてソート
      select(売上比率, 売上)                              # ラベルに使う列だけ抽出して結合
  )

# ── Step 3: ベースプロットにラベルと書式を追加 ────────────────────────────────

p_base +
  # 比率(%)をブロック内に表示
  geom_text(
    data = label_data,                                    # Step 2 で作ったラベルデータを使用
    aes(x = xmid, y = ymid,                              # ブロック中央に配置
        label = percent(売上比率, accuracy = 1)),         # 売上比率を % 書式で表示
    inherit.aes = FALSE,                                  # p_base の aes を引き継がない
    color = "white", size = 3, family = "HiraKakuProN-W3"
  ) +
  labs(
    x = "製品サブカテゴリー",                            # X 軸ラベル
    y = "顧客セグメント比率",                            # Y 軸ラベル
    fill = ""                                             # 凡例タイトルを非表示
  ) +
  scale_fill_brewer(palette = "Set2") +                  # カラーパレットを指定
  theme_marimekko(base_family = "HiraKakuProN-W3") +    # マリメッコ用テーマを適用
  theme(
    legend.position = "top",                             # 凡例を上部に配置
    axis.title.x = element_text(margin = margin(t = 12)), # X 軸タイトルを下にずらす
    axis.title.y = element_text(margin = margin(r = 12))  # Y 軸タイトルを左にずらす
  )

スクリプトを貼り付けたら「ビュー」ボタンをクリックすると、マリメッコ・チャートがプレビューに表示されます。

今回のデータにおいては、geom_marimekko() 関数の weight 引数に「売上」を、formula 引数に ~ 製品サブカテゴリー | 顧客セグメント を指定するだけでチャートが描画されます。

列の幅・高さの計算はパッケージ側が自動処理します。

ggplot_build() で各ブロックの計算済み位置情報(xmin/xmax/ymin/ymax)を取り出し、bind_cols() でデータフレームの「売上比率」と「売上」を結合することで、geom_text() を使ったラベル表示が可能になります。

ノートやダッシュボードにチャートを挿入する

チャート・ビューで作成したチャートは、チャートのタイプを問わずダッシュボードやノートに配置することが可能です。

配置したチャートは他のチャートと同じようにダッシュボードを実行すると表示されます。

ノートやダッシュボードで直接マリメッコ・チャートを作成する

カスタム (R) チャートと同じRスクリプトを使って、Exploratoryのノート上でもマリメッコ・チャートを作成することができます。

  • ノートやダッシュボードのコンテンツの追加メニューの紹介 - リンク

ノートの編集画面や、ダッシュボードのテキストパネルのコンテンツの追加ボタンから「R スクリプト」を選択すると、Rのコードを入力するためのコードブロックが表示されます。

続いて、以下のスクリプトを貼り付けます。

カスタム (R) チャートとの違いは、${DATA} の代わりにデータフレーム名(ここでは 注文データ)を直接指定する点のみです。

library(ggplot2)
library(marimekko)
library(dplyr)
library(scales)

p_base <- ggplot(注文データ) +
  geom_marimekko(
    aes(fill = 顧客セグメント,
        weight = 売上),
    formula = ~ 製品サブカテゴリー | 顧客セグメント
  )

label_data <- ggplot_build(p_base)$data[[1]] %>%
  mutate(
    xmid = (xmin + xmax) / 2,
    ymid = (ymin + ymax) / 2
  ) %>%
  bind_cols(
    注文データ %>%
      arrange(製品サブカテゴリー, 顧客セグメント) %>%
      select(売上比率, 売上)
  )

p_base +
  geom_text(
    data = label_data,
    aes(x = xmid, y = ymid,
        label = percent(売上比率, accuracy = 1)),
    inherit.aes = FALSE,
    color = "white", size = 3, family = "HiraKakuProN-W3"
  ) +
  labs(
    x = "製品サブカテゴリー",
    y = "顧客セグメント比率",
    fill = ""
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_marimekko(base_family = "HiraKakuProN-W3") +
  theme(
    legend.position = "top",
    axis.title.x = element_text(margin = margin(t = 12)),
    axis.title.y = element_text(margin = margin(r = 12))
  )

プレビュー・ボタンをクリックするすることで、コードの実行結果を確認できます。

参考情報

  • カスタム (R) チャートの使い方 - リンク
Export Chart Image
Output Format
PNG SVG
Background
Set background transparent
Size
Width (Pixel)
Height (Pixel)
Pixel Ratio