高度なグラフ作成
Graph BuilderはBar Chart、Histogram、Scatter Plotなど、複数のGraph Typeを提供しています。 描画したいものが決まり切った形式のグラフで、多少の調整さえできればよい場合には、これらは手軽で使いやすいものです。
ただある程度突っ込んだ分析をしていると、より柔軟に描画内容を制御して、独自のグラフを作りたくなる場面が出てきます。 Custom Graphはそのための機能を提供します。
Custom Graphは、Grammar of Graphicsという理論にもとづいています。 グラフを「データ」「統計変換」「幾何オブジェクト」「座標系」といった構成要素に分解し、これらをレイヤーとして自由に組み合わせることで、以下のような高度な可視化を実現できます:
- 複数のグラフタイプを1つのグラフに重ね合わせる(例:散布図+回帰直線+信頼区間)
- データを統計的に変換してから可視化する(例:ヒストグラム、カーネル密度推定)
- ファセット(小区画)で多次元データを探索する
- 座標軸のスケールや方向を柔軟に制御する
他のGraph Typeが「完成品の家具」だとすれば、Custom Graphは「組み立て式の素材セット」です。基本的な構成要素を理解すれば、使い方次第でほぼ無限の可視化パターンを作成できます。
Grammar of Graphicsの7つの構成要素
Custom Graphは、以下の7つの要素を組み合わせてグラフを構築します:
- Data: 可視化対象のデータセット
- Aesthetics: 変数(データセットの列)と視覚属性(位置、色、サイズなど)との対応関係
- Layers: 複数の視覚要素を重ねる場合の、その各要素
- Statistics: データの統計変換(ビニング、平滑化など)
- Scales: データ値から視覚値への変換方法
- Coordinates: 座標系(直交座標、軸の入れ替えなど)
- Facets: 複数の小グラフをまとめたグラフを作る場合の、その構成
これらを組み合わせることで、データの多様な側面を可視化できます。
Data - データの選択
まずは可視化するデータセットを選択します。ここではAuto MPGデータセット(1970-1982年の自動車398台の燃費データ)を使います。
Aesthetics - 美的要素のマッピング
データの列を視覚属性にマッピングします。最も基本的なのは、2つの連続変数をx軸とy軸にマッピングすることです。
Data: Auto MPG
Aesthetics: x = weight, y = mpg
Geometry: Point

重い車ほど燃費が悪い、という明確な負の相関が見えます。
色と対応させる
3つ目の変数を色にマッピングすることで、さらに情報を追加できます。
例えばorigin(USA、Europe、Japan)で色分けしてみます。
Aesthetics: x = weight, y = mpg, color = origin

サイズと対応させる
horsepowerを点のサイズに対応させます。
Aesthetics: x = weight, y = mpg, color = origin, size = horsepower

大きな点ほど馬力が高いことを示します。重くて馬力の高い車は燃費が悪い、という関係が視覚的に理解できます。
Layers - レイヤーの重ね合わせ
レイヤーにより、複数のグラフを重ねられます。 例えば散布図の上にLOESSによる平滑化曲線を追加してみます。
Layer 1: Point (x = weight, y = mpg)
Layer 2: Line + Smooth統計 (method = lm)

青い線が平滑化曲線です。平均的な傾向を曲線で示せます。
Statistics - 統計変換
データをそのまま表示するだけでなく、統計的に変換して表示できます。
ヒストグラム(Binning)
燃費の分布を見るため、データをビン(区間)に分割してカウントします。
Aesthetics: x = mpg
Geometry: Bar
Statistics: Bin (bins = 20)

ほとんどの車が15-30mpgの範囲に集中していることがわかります。分布はやや右に偏っており、燃費の良い車は少数派です。
密度推定
ビンの代わりに滑らかな密度曲線で分布を表現できます。
Aesthetics: x = mpg
Show Density Curve: Yes

ヒストグラムと同じ情報を、連続的な曲線で表現しています。
複数グループの密度比較
カテゴリごとに密度曲線を重ねることで、分布の違いを比較できます。
originごとにヒストグラムの上に密度曲線を描いてみましょう。
Layer 1 (Bar):
Aesthetics: x = mpg, fill = origin
Geometry: Bar
Statistics: Bin (bins = 30)
Layer 2 (Line):
Aesthetics: x = mpg, color = origin
Geometry: Line
Statistics: Density (Y Scale = Count)

ポイント:
- Layer 1 (Bar):
fill = originで棒グラフを色分け - Layer 2 (Line):
color = originで密度曲線を色分け、Y Scale = Countでヒストグラムとスケールを合わせる - BarとLineで同じ色スケールが使われるため、色が一致します
日本車は高燃費側、米国車は低燃費側に分布のピークがあることが明確です。
Position - 位置調整
複数のカテゴリを棒グラフで比較する際、位置調整が重要になります。
積み上げ棒グラフ
Aesthetics: x = model_year, fill = cylinders
Geometry: Bar
Statistics: Count
Position: Stack

各年の車種の内訳が積み上げで表示されます。1970年代は8気筒車が多く、後半になるにつれ4気筒車が増えています。
並列棒グラフ
Positionをdodgeに変更すると、横に並べて表示されます。
Position: Dodge

各シリンダー数の推移が比較しやすくなります。
Coordinates - 座標系
軸の入れ替え
ヒストグラムや棒グラフを横向きにすると、長いラベルが読みやすくなります。
Aesthetics: x = mpg
Geometry: Bar
Statistics: Bin
Coordinates: Flip

縦軸と横軸が入れ替わり、ヒストグラムが横向きに表示されます。カテゴリ名が長い場合や、縦方向のスペースを有効活用したい場合に便利です。
Facets - ファセット分割
カテゴリごとにグラフを分割して並べることで、サブグループの比較が容易になります。Facetsセクションには2つのタイプがあります:Facet Wrap(単一変数による分割)とFacet Grid(2変数による行列分割)。
Facet Wrap - 単一変数による分割
Facet Wrapは、1つのカテゴリカル変数でデータを分割し、複数のパネルをグリッド状に配置します。
※変数の尺度(Scale)が名義尺度または順序尺度でなければ分割の基準として指定できません。ここではcylinders変数の尺度を順序尺度(Ordinal Scale)に変更して描画しています。
Aesthetics: x = weight, y = mpg
Geometry: Point
Facets: Type = Facet Wrap (Single Variable)
Variable = cylinders

4気筒、6気筒、8気筒それぞれで、重量と燃費の関係を並べて比較できます。8気筒車は全体的に重く、燃費も悪い範囲に集中しています。
別の例として、originで分割することもできます:
Aesthetics: x = weight, y = mpg
Geometry: Point
Facets: Type = Facet Wrap (Single Variable)
Variable = origin

origin(europe、japan、usa)ごとにパネルが横並びに配置されます。
Facet Wrapでは、パネルの配置を制御するオプションがあります:
- Variable: 分割に使用するカテゴリカル変数
- Columns: 1行あたりのパネル数(オプション)
- Rows: 列の数(オプション)
Columnsのみを指定すると、行数が自動計算されます。Rowsのみを指定すると、列数が自動計算されます。両方を省略すると、パネル数に応じて最適な配置が計算されます。
Facet Grid - 2変数による行列分割
Facet Gridは、2つのカテゴリカル変数を使って行(Rows)と列(Columns)を定義し、より複雑な比較を可能にします。
Facets: Type = Facet Grid (Two Variables)
Rows = cylinders
Columns = origin

シリンダー数と原産地の組み合わせごとにグラフが配置されます
Scales - スケールの制御
対数スケール
データの範囲が広い場合、対数スケールが有効です。
Scales: x = log

色スケール
どのような色を使うかを、色スケールで指定できます。
連続変数、カテゴリカル変数それぞれで使用可能なパレットが定義されています。
Aesthetics: x = weight, y = mpg, color = origin
Scales: Palette = Viridis (Discrete)

Viridis (Discrete)は、知覚的に均一で色覚多様性に配慮したパレットです。カテゴリカルデータ用に最適化されており、印刷時やモノクロ表示でも区別しやすくなります。他にもPlasma、Inferno、Magmaのdiscrete版が利用可能です。
まとめ
Custom Graphは、7つの要素を自由に組み合わせることで、複雑な可視化を実現できます。 設定項目が多く複雑ですが、広範な要件に対応できます。