グラフィックス文法(GoG)は、データや情報の視覚化の構成に文法的な制約を与えるための、グラフィックスを表現するための文法ベースのシステムです。グラフィカル文法は、スケールやガイド、統計関数、座標系、マーク、美的属性といった意味的要素に焦点を当てている点で、グラフィックスパイプラインとは異なります。 [1] [2]例えば、棒グラフは、極座標系を指定することで、他のグラフィカル仕様を変更することなく円グラフに変換できます。 [1] [3]
グラフィックス文法の概念は、 2001年にLeland Wilkinsonによって提唱され(Wilkinson et al., 2001; Wilkinson, 2005)、それ以来、グラフィカル文法はさまざまなパラメータ化と拡張機能を備えたさまざまな言語で記述されてきました。[1]グラフィカル文法の主な実装は、 SPSS / IBMのチームによって作成されたnViZn 、多次元リレーショナルデータベースに焦点を当ててTableauとして商品化されたPolaris、 Ggplot2でHadley Wickhamによって改訂されたLayered Grammar of Graphics 、およびインタラクティブ性が追加された視覚化文法であるVega-Liteです。[4]グラフィックス文法は、代替パラメータ化、拡張機能、または新しい仕様とともに進化し続けています。
ウィルキンソンのグラフィックス文法
理論
ウィルキンソンはグラフィックスの7つの要素を次のように考えました[3] [1]
- 変数: グラフィックで表現される値へのオブジェクトのマッピング
- 代数:変数を結合し、グラフの次元を指定する演算
- 幾何学:変数からの幾何学グラフの作成
- 美学:感覚的属性
- 統計:グラフの外観と表現を変更する関数
- スケール: 測定された寸法上の変数を表す
- 座標: 座標系へのマッピング
これらを踏まえてウィルキンソンは次のような仮説を立てた[3] [1] [5]
- これらは7つの構成が直交しており、事実上すべての既知の統計チャートは比較的簡潔に生成できる。
- この計算システムはチャートの分類法ではなく、統計グラフを作成するときに行う作業の意味を説明しています。
実装
ウィルキンソンは1980年代初頭に統計ソフトウェアパッケージSYSTATを開発しました。このプログラムは、包括的なグラフィックス機能で高く評価されており[6] 、現在生物学者の間で広く使用されているヒートマップ表示を初めてソフトウェアで実装しました。彼の会社が従業員50名に成長した後、1995年にSPSS社に売却しました。SPSS社では、グラフィックスプログラマーのチームを編成し、SPSS、Clementine、その他の分析製品 で可視化を実現するnViZnプラットフォーム[7]を開発しました。
スタンフォード大学在学中、Tableauの創設者ハンラハンとストルテ、そしてダイアン・タンは、Tableauの前身となるPolarisを開発しました。[8] Polarisは、米国エネルギー省の防衛プログラムである加速戦略コンピューティング・イニシアチブ(ASCI)の支援を受けて開発されたデータ視覚化ソフトウェアツールです。[9] [10]ウィルキンソンのシステムとPolarisの主な違いは、データベースサービスにSQLリレーショナル代数を使用していることと、クロス演算子とネスト演算子の代わりにシェルフを使用していることです。[8]
ウィッカムの階層的グラフィックス文法
理論
ハドリー・ウィッカムは、ウィルキンソンが導き出した構文の代替パラメータ化を考案し、階層化されたグラフィックスの文法を作成し、R(プログラミング言語)ユーザー向けにGgplot2として実装しました。[11] [12]これにより、複数のレイヤーからグラフィックスを構築するというアイデアに基づいたデフォルトの階層が追加されました。[13] [14]ウィッカムはこれらの要素を次のように考えました。
- デフォルト: データとマッピングで構成される
- データ: データセット
- マッピング:美的マッピング
- レイヤー: データ、マッピング、ジオメトリ、統計、位置から構成されます
- データ: データセット、またはデフォルトから継承
- マッピング: 美的マッピング、またはデフォルトからの継承
- Geom : 幾何学的オブジェクト
- 統計:統計変換
- 位置:位置調整
- スケール:データと美的属性のマッピング
- 座標: プロットの平面へのデータのマッピング
- ファセット: データを分割する
受付
ウィルキンソンは、ウィッカムのggplot2のパラメータ化と実装を概ね肯定的に評価しており、[4]その優雅さと表現力を称賛するとともに、彼のオリジナルのグラフィックス文法はより広範囲の統計グラフを表現できると主張している。[5] [15]
実装
Ggplot2 は、R における階層型グラフィックス文法の最初の実装であり、その後他のプログラミング言語でも実装が続きました。これらには、 Python用の plotnine 、 MATLAB用の gramm 、Kotlin用の Lets-Plot、 Julia用の gadfly といった直接移植版が含まれます。Wickham の文法の要素に着想を得たプロジェクトには、 JSONでプロットを指定し、JavaScriptエンジンを使用する Vega-Lite などがあります。Python 向けの実装には、Vega-Altair(Vega-Lite と Seaborn をベースに構築)があります。
Vega-Lite: インタラクティブグラフィックスの文法
理論
Vega-Liteは、ウィルキンソンのグラフィックス文法とウィッカムの階層化グラフィックス文法の考え方を、階層化およびマルチビューディスプレイのための合成代数とインタラクション文法と組み合わせたものです。Vega-Liteの仕様はJSONでインスタンス化され、低レベルのVegaによってレンダリングされます。[16] Vega-Liteによって実装されるグラフィカル文法は、以下の要素で構成されています。
- ユニット: データ、変換、マークタイプ、エンコーディングから構成されます
- データ: レコード (行) と名前付き属性 (列) で構成されるリレーショナル テーブル
- 変換:データ変換
- マークタイプ:視覚的な符号化のための幾何学的オブジェクト
- エンコーディング:データ属性を視覚的なマークのプロパティにマッピングします。各エンコーディングは次のもので構成されます。
- チャネル:例: 色、形状、サイズ、テキスト
- フィールド:データ属性
- データ型:例: 名義尺度、順序尺度、定量尺度、時間尺度
- 値:データ型の代わりにリテラルを使用する
- 機能:例: ビニング、集計、ソート
- スケール:データ領域から視覚範囲へのマッピング
- ガイド:スケールを視覚化するための軸または凡例
- 複合ビュー:演算子を使用して複数のユニット仕様からビューを作成します。
- レイヤー: 重ねてプロットされたチャート
- Hconcat/Vconcat : ビューを並べて配置する
- ファセット: トレリスプロットを作成するためのデータのサブセット
- 繰り返し: ファセットに似ていますが、各セルで完全なデータ複製を含む複数のプロット
- インタラクション: 選択により、ユーザーが操作したいポイントのセットがコンポーネントとともに識別されます。
- 選択: 最小数のバックアップポイントを取得する
- 名前: 参照
- タイプ: 保存されるバックアップ値の数
- 述語: 選択されたポイントのセットを決定します(例:単一、リスト、間隔)
- ドメイン|範囲: データドメインまたは視覚的な範囲を格納します
- イベント: 例: マウスオーバー、マウスダウン、マウスアップ、
- Init : 特定のバッキングポイントで初期化する
- 変換: 例:投影、切り替え、移動、ズーム、最接近
- 解決: 選択範囲を結合または交差に解決します
- 選択: 最小数のバックアップポイントを取得する
実装
Vega-Lite は、Vega にコンパイルされたこのグラフィックス文法仕様の唯一の実装ですが、他の実装では、Vega-Lite で解釈できる JSON ファイルを作成します。
関連プロジェクト
- Ggplot2 [2]はプロット用のRパッケージである。
- Tableau Software [8](元々はPolarisとして知られていた)は、グラフィックスの文法を使用して構築された商用ソフトウェアである。
- nViZn [17]ウィルキンソン社製。
- SYSTAT(統計パッケージ)[18] Wilkinsonによって構築
- ggpy、Python用のggplot [19]ですが、2016年11月20日以降更新されていません。
- plotnine [20]はPythonのggplotのスケーラビリティを向上させるための取り組みとして始まり、ggplot2の構文とほぼ互換性があります。
- Plotly - インタラクティブなオンラインggplot2グラフ[21]
- gramm、 ggplot2に触発されたMATLABのプロットクラス[22]
- gadflyは、 Juliaで書かれたプロットと視覚化のためのシステムで、主にggplot2に基づいています[23]
- Chart::GGPlot - Perlでのggplot2ポート、[24]ですが、2023年3月16日以降更新されていません。
- Lets-Plot for PythonライブラリにはネイティブバックエンドとPython APIが含まれており、主にggplot2パッケージに基づいています。[25]
- Lets-Plot Kotlin APIは、 Kotlinプログラミング言語を使用して実装された統計データ用のオープンソースのプロットライブラリであり、リーランド・ウィルキンソンの著書『グラフィックスの文法』で最初に説明された階層化グラフィックスの原則に基づいて構築されています。[26]
- ggplotnimはggplot2に触発されたNimプログラミング言語を使用したプロットライブラリです。 [27]
- Vega と Vega-Lite は、 JSON を使用してプロットを指定するプロット ライブラリです。
- Vega-Lite 上に構築された Python ライブラリである Vega-Altair
- chart-parts - React対応グラフィックス文法[28] [29]ですが、2021年12月10日以降更新されていません。
- g2 [30] - JavaScriptライブラリ
参考文献
- ^ abcde Myatt, Glenn J.; Johnson, Wayne P. (2012). Making sense of data III: a practical guide to designing interactive data visualizations . Hoboken, NJ: Wiley. ISBN 978-0-470-53649-0。
- ^ ab Wickham, Hadley (2016). ggplot2: データ分析のためのエレガントなグラフィック. Rを使おう!. Carson Sievert (第2版). Cham: Springer international publishing. ISBN 978-3-319-24275-0。
- ^ abc Wilkinson, Leland; Wills, Graham (2011). The grammar of graphics . Statistics and Computing (第2版、ハードカバー版第2版(2005年版)のソフトカバー版再版). New York, NY: Springer. ISBN 978-1-4419-2033-1。
- ^ ab Wilkinson, Leland (2011). 「ggplot2: データ分析のためのエレガントなグラフィック by WICKHAM, H.」Biometrics . 67 (2): 678– 679. doi :10.1111/j.1541-0420.2011.01616.x.
- ^ ab 「エピソード#201: リーランド・ウィルキンソン」。PolicyViz 。2025年7月13日閲覧。
- ^ Jarrett, Jeffrey (1992). 「SYSTAT/SYGRAPHとMicro-TSP」.統計とコンピューティング. 2 (4): 231– 236. doi :10.1007/BF01889683. S2CID 119499841.
- ^ Jones, Lacey; Symanzik, Jürgen. 「nViZnを用いたWeb上の環境データの統計的可視化」(PDF) 。 2011年10月5日時点のオリジナル(PDF)からのアーカイブ。
- ^ abc Stolte, C.; Tang, D.; Hanrahan, P. (2002). 「Polaris: 多次元リレーショナルデータベースのクエリ、分析、可視化のためのシステム」IEEE Transactions on Visualization and Computer Graphics . 8 (1): 52– 65. Bibcode :2002ITVCG...8...52S. doi :10.1109/2945.981851.
- ^ 「Polaris: データベースとデータキューブの可視化」. graphics.stanford.edu . 2023年4月30日閲覧。
- ^ Stolte, C.; Tang, D.; Hanrahan, P. (2002年1月). 「Polaris: 多次元リレーショナルデータベースのクエリ、分析、可視化のためのシステム」. IEEE Transactions on Visualization and Computer Graphics . 8 (1): 52– 65. Bibcode :2002ITVCG...8...52S. doi :10.1109/2945.981851. ISSN 1941-0506.
- ^ Wickham, Hadley (2025-03-22), hadley/ggplot1 , 2025-07-13取得
- ^ 「グラフィックスの文法を使ってエレガントなデータ視覚化を作成する」ggplot2.tidyverse.org . 2025年7月13日閲覧。
- ^ Wickham, Hadley Alexander (2008). データとモデルの探索のための実践的なツール(博士論文). エイムズ:アイオワ州立大学デジタルリポジトリ. doi :10.31274/rtd-180813-16852.
- ^ Wickham, Hadley (2010). 「グラフィックスの階層化文法」 .計算およびグラフィカル統計ジャーナル. 19 (1): 3– 28. doi :10.1198/jcgs.2009.07098. ISSN 1061-8600.
- ^ Chang, Winston (2018). Rグラフィックス・クックブック:データ可視化のための実践レシピ(第2版). 北京; ボストン: O'Reilly. ISBN 978-1-4919-7860-3。
- ^ Satyanarayan, Arvind; Moritz, Dominik; Wongsuphasawat, Kanit; Heer, Jeffrey (2017). 「Vega-Lite: インタラクティブグラフィックスの文法」. IEEE Transactions on Visualization and Computer Graphics . 23 (1): 341– 350. Bibcode :2017ITVCG..23..341S. doi :10.1109/TVCG.2016.2599030. ISSN 1077-2626. PMID 27875150.
- ^ “nViZnページ”. www.cs.uic.edu . 2022年1月20日時点のオリジナルよりアーカイブ。2025年7月13日閲覧。
- ^ 「SYSTATページ」www.cs.uic.edu . 2024年4月18日時点のオリジナルよりアーカイブ。2025年7月13日閲覧。
- ^ "yhat/ggpy: ggplot の Python ポート". GitHub . yhat . 2024年2月1日閲覧。
- ^ “plotnine”. 2023年8月2日時点のオリジナルよりアーカイブ。2023年8月2日閲覧。
- ^ 「ggplot2用Plotlyグラフライブラリ(ggplot2用)」. Plotlyグラフライブラリ. Plotly . 2024年2月1日閲覧。
- ^ "ggplot for Matlab". GitHub . Pierre Morel (@piermorel) . 2015年12月11日閲覧。
- ^ “Gadfly.jl”. Gadfly.jl . 2018年9月11日閲覧。
- ^ “Stephan Loyd/Chart-GGPlot-0.0001”. MetaCPAN . 2019年3月30日閲覧。
- ^ “JetBrains/lets-plot”. GitHub . JetBrains . 2021年4月3日閲覧。
- ^ “JetBrains/lets-plot-kotlin”. GitHub . JetBrains . 2021年4月4日閲覧。
- ^ "ggplotnim". GitHub . Vindaar . 2023年8月1日閲覧。
- ^ microsoft/chart-parts、Microsoft、2025年6月26日、 2025年7月13日取得
- ^ 「チャートパーツの概要」。microsoft.github.io . 2025年7月29日閲覧。
- ^ antvis/G2、AntV可視化チーム、2025年7月15日、 2025年7月16日取得