高度なグラフ作成
Bar Chart、Histogram、Scatter Plot などの Graph Type は、決まった形式のグラフを手軽に描くためのものです。散布図に回帰直線を重ねる、ヒストグラムに密度曲線を重ねる、ファセットでサブグループを比較するなど、決まった形式に収まらないグラフを組み立てたい場合に Custom Graph を使います。
Custom Graph は、グラフを構成要素の組み合わせとして捉える Grammar of Graphics の考え方に基づいています。基本的な構成要素を理解すれば、多様な可視化パターンを作成できます。このページでは、Auto MPG データセット(1970-1982年の自動車398台の燃費データ)を例に、グラフを組み立てながら各構成要素を説明します。
Grammar of Graphics の構成要素
Custom Graph のグラフは、1 つ以上の Layer(レイヤー)と、グラフ全体の設定からなります。レイヤーは 1 つの描画を定義する単位で、次の要素を持ちます。
- Aesthetics: 変数(データセットの列)と視覚属性(位置、色、サイズなど)との対応関係
- Geometry: データの視覚的な表現形式(Point、Line、Bar など)
- Statistics: データの統計変換(ビニング、平滑化など)
- Position: 要素の位置調整(積み上げ、並列など)
グラフ全体では次の要素を指定し、すべてのレイヤーで共有します。
- Data: 可視化対象のデータセット
- Coordinates: 座標系(直交座標、軸の入れ替えなど)
- Facets: 複数の小グラフをまとめたグラフを作る場合の、その構成
- Scales: データ値から視覚値への変換方法
複数のレイヤーを重ねると、散布図と回帰直線のように複数の描画を 1 つのグラフにまとめられます。
Aesthetics - 視覚属性のマッピング
データの列を視覚属性にマッピングします。最も基本的なのは、2つの連続変数を x 軸と y 軸にマッピングすることです。
Data: Auto MPG
Aesthetics: x = weight, y = mpg
Geometry: Point

重い車ほど燃費が悪い、という負の関連が見えます。この例の Geometry は Point で、データの各行を 1 つの点として描画します。Geometry を変えると、同じ対応関係を線や棒など別の形式で描画できます。
色と対応させる
3つ目の変数を色にマッピングすることで、さらに情報を追加できます。
例えば origin(usa、europe、japan)で色分けしてみます。
Aesthetics: x = weight, y = mpg, color = origin

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

大きな点ほど馬力が高いことを示します。重くて馬力の高い車は燃費が悪い、という関係が視覚的に理解できます。
fill と color
Aesthetics には fill と color の2つの色指定があります。fill は Geometry の塗りに対応し、Bar の棒の内側や Area の面に適用されます。color は輪郭・線・点の色で、Point の点や Line の線に適用されます。Point と Line は fill に対応しておらず、色は color のみで制御します。逆に Bar は color に対応しておらず、棒の色は fill で制御します。
Layers - レイヤーの重ね合わせ
レイヤーを追加すると、複数のグラフを 1 つに重ねられます。 例えば散布図の上に LOESS(局所重み付け回帰)による平滑化曲線を追加してみます。
Layer 1: Point (x = weight, y = mpg)
Layer 2: Line + Smooth統計 (method = loess)

青い線が LOESS 平滑化曲線です。データの局所的なパターンを滑らかな曲線で要約します。Method を Linear (LM) に変更すると、線形回帰直線を描画します。LOESS 選択時は Span で曲線の滑らかさを調整できます。color や fill などの aesthetic でグループ化している場合は、グループごとに独立した回帰を実行します。
Compute interval band をオンにすると、回帰の区間を帯として重ねられます。Interval type で、新たな 1 観測がおさまる範囲を表す予測区間か、回帰曲線の推定精度を表す信頼区間かを選び、水準を Interval level で指定します。予測区間の意味と前提は用語集を、Smooth のパラメータの一覧は Custom Graph リファレンス を参照してください。
Statistics - 統計変換
データをそのまま表示するだけでなく、統計的に変換して表示できます。
ヒストグラム(Binning)
燃費の分布を見るため、データをビン(区間)に分割してカウントします。
Aesthetics: x = mpg
Geometry: Bar
Statistics: Bin (bins = 20)

ほとんどの車が15-30 mpg の範囲に集中していることがわかります。分布は右裾が長く、燃費の良い車は少数派です。
ビン数は分布の形状に合わせて調整します。
密度推定
ビンの代わりに滑らかな密度曲線で分布を表現できます。
Aesthetics: x = mpg
Geometry: Line
Statistics: Density

同じデータの分布を、別の方法で表現しています。ガウシアンカーネルで密度を推定し、バンド幅は Silverman の経験則で自動計算します。
複数グループの密度比較
カテゴリごとに密度曲線を重ねることで、分布の違いを比較できます。
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 は fill = origin で棒の塗りを、Layer 2 は color = origin で密度曲線の線色を分けています。両レイヤーには同じ色スケールが適用されるため、同じカテゴリの棒と曲線が同じ色になります。
Layer 2 の Y Scale = Count は、密度値にデータ件数とビン幅を掛けて度数スケールに変換します。このビン幅は Sturges の公式で内部計算され、Layer 1 の bins = 30 とは独立なため、両者の縦軸が厳密に一致するとは限りません。
日本車は高燃費側、米国車は低燃費側に分布のピークがあることが明確です。
Position - 位置調整
複数のカテゴリを棒グラフで比較する際、位置調整が重要になります。
積み上げ棒グラフ
Aesthetics: x = model_year, fill = cylinders
Geometry: Bar
Statistics: Count
Position: Stack

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

各気筒数の推移が比較しやすくなります。全体の構成比を見るには Stack を、グループ間の値を直接比較するには Dodge を使います。
構成比で積み上げる
Position を Fill にすると、各 x 値の積み上げ棒を、全体の長さが 100% になるよう正規化します。各セグメントの長さは、その x 値の合計に占める割合を表します。負の値を含むデータでは、値の絶対値の合計を 100% として、正のセグメントを基準線の上に、負のセグメントを基準線の下に分けて積みます。カテゴリ間の構成比の推移を比較したい場合に有効です。
Position: Fill
点の重なりをずらす
Position を Jitter にすると、各点に小さなランダムな変位を加えて重なりを緩和します。x が数値の場合は X・Y 両方向、x がカテゴリカルの場合は Y 方向のみにずらします。同じ x 値に多くの観測が重なる Point の散布図で、点の密度を読み取りやすくなります。Dodge がカテゴリの枠を保ったまま横にずらすのに対し、Jitter はランダムな変位を加えるため、個々の点の位置は描画のたびに微小に変わります。
Coordinates - 座標系
軸の入れ替え
ヒストグラムや棒グラフを横向きにすると、長いラベルが読みやすくなります。
Aesthetics: x = mpg
Geometry: Bar
Statistics: Bin
Coordinates: Flipped

縦軸と横軸が入れ替わり、ヒストグラムが横向きに表示されます。カテゴリ名が長い場合や、縦方向のスペースを有効活用したい場合に便利です。
Facets - ファセット分割
カテゴリごとにグラフを分割して並べることで、サブグループの比較が容易になります。Facets には、1 つの変数で分割する Facet Wrap と、2 つの変数で行列に分割する Facet Grid の 2 つのタイプがあります。
Facet Wrap - 単一変数による分割
Facet Wrap は、1つの変数でデータを分割し、複数のパネルをグリッド状に配置します。 分割にはデータセットの任意の列を指定できます。ユニーク値の数が上限を超える列は選択できません。上限はデフォルトで 1 変数あたり 20 カテゴリ、パネル総数 50 で、いずれも Settings から変更できます。
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)ごとにパネルが分割され、できるだけ正方形に近いグリッドに自動配置されます。3 パネルでは 2 列 × 2 行になります。横一列に並べたい場合は Columns に 3 を指定します。
Facet Wrap では、パネルの配置を制御するオプションがあります:
- Variable: 分割に使用する変数
- Columns: 1 行あたりのパネル数
- Rows: 行の数
- Scales: 軸スケールの共有方法
Scales の Fixed(デフォルト)は全パネルで同じ軸範囲を使い、Free X / Free Y / Free はパネルごとに軸範囲を独立させます。Columns のみを指定すると、行数が自動計算されます。Rows のみを指定すると、列数が自動計算されます。両方を省略すると、パネル数に応じて最適な配置が計算されます。
Facet Grid - 行列分割
Facet Grid は、1つまたは2つの変数で行(Rows)と列(Columns)の2方向にパネルを配置します。
Facets: Type = Facet Grid (Two Variables)
Rows = origin
Columns = cylinders

気筒数と原産地の組み合わせごとにグラフが配置されます。
Scales - スケールの制御
対数スケール
比率や倍率でデータを比較する場合や、裾の重い分布に対数スケールが有効です。
Scales: x = log

対数は 0 以下の値に定義されないため、0 以下を含む列に適用するとグラフは描画されず、原因の軸・列名・件数を示すエラーが表示されます。
色スケール
どのような色を使うかを、色スケールで指定できます。
連続変数、カテゴリカル変数それぞれで使用可能なパレットが定義されています。利用可能なパレットの一覧は Custom Graph リファレンス を参照してください。
Sequential と Diverging のスケールは数値列でのみ機能します。スケール種別の選択は Fill aesthetic の設定に表示されます。数値でない列に指定した場合、MIDAS は列の型を優先してカテゴリカルスケールで描画し、警告を表示します。あわせて Diverging 用のパレットを指定している場合は、カテゴリカルスケールと非互換になるためエラーが表示され、グラフは描画されません。
ここでは cylinders 変数の尺度を Ordinal に変更してから描画しています。尺度の変更は Data Table で列を右クリックし、Edit Scale of Measurement から行えます。
Aesthetics: x = weight, y = mpg, color = cylinders
Scales: Palette = Viridis

Viridis は知覚的に均一で色覚多様性に配慮したパレットです。cylinders(気筒数)のような順序尺度の変数に適用すると、カテゴリ数ぶんの色をパレット全域から等間隔にサンプリングするため、明度が順序に沿って単調に変化します。同種のパレットに Plasma、Inferno、Magma があります。
カテゴリの並び順は列の型で決まります。数値列は数値の昇順、順序尺度の enum 列は enum 定義の順、それ以外の列は文字列の昇順でソートされます。
形状と線種のスケール
shape と linetype では、カテゴリに割り当てる形状と線種を選べます。設定は Layer の Aesthetics セクションで、列を選んだ直後に現れます。並びの 1 番目が最初のカテゴリに対応します。
Aesthetics: x = weight, y = mpg, shape = origin
Scales: Shapes = Square, Triangle, Diamond

カテゴリ数が割り当てた形状の数を超えると、形状は並びの先頭から繰り返されます。異なるカテゴリが同じ形状で描かれて区別できなくなるため、この状態はグラフの上に警告として表示されます。同じ形状を複数の行に割り当てた場合も、その行のカテゴリ同士が形状を共有するため同じ警告が表示されます。線種も同じで、種類は Solid・Dashed・Dotted の 3 つしかないため、4 カテゴリ以上を線種で描き分けることはできません。
凡例のタイトルは形状と線種のそれぞれで設定できます。未設定の場合は列名が使われます。
サイズと不透明度のスケール
size と alpha では、描画に使う値の範囲を最小値と最大値で指定します。列の最小値が範囲の最小値に、最大値が範囲の最大値に対応します。size の既定は 2px から 20px、alpha の既定は 0.2 から 1 です。Text レイヤーでは範囲の値がフォントサイズ(px)になり、未設定の場合はフォントサイズが 8px から 24px になります。
Aesthetics: x = weight, y = mpg, size = horsepower
Scales: Size Range = 4, 30

MIDAS はサイズと不透明度の凡例を描画しません。個々の点の値を確認するには、Tooltip の Mode を Custom にして、その列をフィールドに追加します。
Geometry/Statistics リファレンス
Geometry と Statistics の一覧は Custom Graph リファレンス を参照してください。
See also
- Custom Graph リファレンス - Geometry と Statistics の一覧
- Graph Builder タブ - Histogram、Scatter Plot などの基本グラフ
- レポート - グラフやテーブルをレポートにまとめる
このページの Markdown 版もあります。