
こちらのノートでは、マリメッコ・チャートを作成する方法を紹介いたします。
マリメッコ・チャートはビジネス分析において非常に強力な可視化ツールで、「どのカテゴリーが大きいか」と「そのカテゴリーの内訳はどうなっているか」という2つの情報を1つのチャートで同時に表現します。
マリメッコ・チャートは、モザイク・チャートとも呼ばれる、通常の積み上げ棒グラフと異なり、各列の幅と高さの両方がデータを表します。
列の幅は各カテゴリーの合計量(例:売上規模)を、列の高さはそのカテゴリー内の構成比(例:顧客セグメントの割合)を示しています。

このチャートが特に威力を発揮するのは、市場規模と市場シェア、売上規模、カテゴリー比率など、数的な割合と大きさを同時に把握したい場面です。
例えば、製品サブカテゴリーを列として並べた場合、列幅が広いほどそのサブカテゴリーの売上が大きく、列内の色の面積がそのサブカテゴリーにおける顧客セグメントの比率を表します。
これにより「携帯電話は最も売上規模が大きいが、コンシューマー顧客への依存度が高い」「本棚は規模が小さいが、法人顧客の比率が突出して高い」といった洞察を一目で読み取ることができます。
一般的なバーチャートやパイチャートでは2度のチャートを見比べる必要がある情報を、1つのチャートにまとめられる点が最大の強みです。
マリメッコ・チャートを作成するときには、以下の3列から構成される集計済みのデータフレームを用意しておくと、Rスクリプトを使ってチャートを可視化する際、よりシンプルな記述ですみます。

なお、こちらのノートで使用するサンプルのデータは以下のリンクからダウンロードいただけます。
マリメッコ・チャートの作成にあたってはmarimekkoパッケージを利用します。
そんため、プロジェクトメニューから、Rパッケージの管理を選択します。

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

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

これでマリメッコ・チャートを作成する準備が整いました。
インポートした注文データは1行1注文の明細データです。
今回は、マリメッコ・チャートを作成するために、製品サブカテゴリーと顧客セグメントの組み合わせごとに売上を集計したうえで、各サブカテゴリー内での顧客セグメント比率を計算します。
この比率をあらかじめデータ側で計算しておくことで、Rスクリプトがよりシンプルになります。
「製品サブカテゴリー」列のヘッダーをクリックし、表示されるメニューから「集計」を選択します。

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

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

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

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

続けて、各製品サブカテゴリー内でのセグメント比率を計算します。
「売上」列のヘッダーをクリックし、メニューから「表計算」、「…に対する比率」、「合計値」を選択します。

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

グループを指定することで、全体ではなくサブカテゴリーごとの比率が計算されます。
続いて、値の列名の編集ボタンから列名を「売上比率」に変更し、「実行」をクリックしてください。

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

チャート・ビューからカスタム (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))
)

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