Extension:Graph/ja

Graph (グラフ) 拡張機能は、タグでデータの画像化をJSONで記述しレンダリングします. 棒グラフ、円グラフ、タイムテーブル（年表）やヒストグラム（demo）をVega宣言型プログラミングで生成します.

全般的な情報
グラフ拡張機能は強力なVegaベースのグラフをウィキページに加えます. グラフは静的と動的なものの両方が可能です.

もっとも簡便にグラフを追加するには、既存のなどのテンプレートを使います. これらのテンプレートはVegaの複雑さを見ずに済みます. 熟練の利用者ならグラフ用サンドボックスでグラフが作成できます. グラフのサンドボックスでは、JSON に加えてウィキのテンプレート構文を使用できます.

有用なリンク

 * Vega 2ドキュメント - 復元されたVega 2ドキュメントページ.
 * - ウィキでグラフを使う方法の標準的な推奨.
 * - ゼロから複雑でインタラクティブなグラフ完成まで、段階的に解説する説明書.
 * - 多くのサンプルと使い方のトリックを紹介します.
 * TechTalk 動画 - ウィキメディア財団技術部門の議論. グラフ拡張機能を取上げ、Lyra エディターを分かりやすくデモしている (labsにも合わせてインストールする).
 * 興味があれば、Vegaの将来的な機能の動画も参照できる（Jeffrey Heerの基調講演）.
 * 開発者のための Vega 解説 - Vegaのリソースを探すならこちらが最適.
 * 対話的な Vega の紹介動画
 * 対話的な Vega の紹介動画

追加設定のセットアップ
en.wikiのような本番環境を複製したい場合、以下のステップを実行する必要があります.

ルール (Vagrantを使用することにした場合のみ)


 * graphsロールを有効にする
 * scribuntoロールを有効にする
 * imagemapロールを有効にする

テンプレートとLuaモジュール


 * Module:Graph をローカルにコピーする
 * Module:Graph/doc をローカルにコピーする
 * Template:Nowrap をローカルにコピーする
 * Copy Template:Nowrap/styles.csslocally
 * Module:Chartをローカルにコピーする
 * Module:Chart/Default_colors をローカルにコピーする
 * File:Circle_frame.svg をローカルにコピーする

表の例
サンプルや使用法の裏技はを参照してください.

利用者定義のフォールバック
クライアント サイドのレンダリングを使用する場合、 利用者に静的なフォールバック画像を提供するためにウィキメディア コモンズが使用できます. これは、サーバーサイドレンダリングを提供するために、間もなく廃止されるGraphoidサービスを置き換える新しいサービスが実装されるまでの一時的な対処です.

利用者は最初に静的なグラフをウィキメディア コモンズにアップロードする必要があります.

フォールバック画像には2つの変数  と   があります.

はWikimedia Commonsのファイル名に対応します.

はフォールバック画像の幅のピクセル数です.

これらの変数は以下の方法でグラフを通して渡されます.

Module:Graphのようなluaモジュールを使用する場合、これらの変数はタグ関数で提供することができます. を適応させると、こんな感じになります.

そして、次のような形でテンプレートに活用されることになる.

fallbackWidth が提供されず、画像が定義されている場合、拡張機能は提供されたグラフ幅から幅を導きます. その理由は、レンダリング画像の幅と実際の画像の幅に差が生じることが多いからです.

外部データ
HTTP(S)を使ってグラフのデータを取得することはできません. 代わりに や 等、固有のウィキ・プロトコルを使用してください.

Graphoidサービスとグラフ拡張機能は 設定を用いてプロトコルの解決を設定します. Note that because queries rely on the structure of wikibase items, they may suddenly stop working if the underlying data is edited and changes, as it may yield incomplete, empty or invalid data that can't be used to create a graph. In these cases the graph will end up empty (see T168601).

既知のバグと制限

 * tag/graph - Graph 拡張機能のバグ
 * tag/graphoid/ - Graphoid サービスのバグ
 * ISO 8601タイムスケールの実装に失敗. したがってタイムラインではグレゴリオ暦のみ使用可能.
 * ほとんどのブラウザーで、既定では画像の拡大はぼやけている場合があります. 解決するにはimage-rendering属性を適正に設定します.

内部リンク
解析をすると、グラフ拡張機能はテンプレートのパラメータやexpressionsをすべて開き、グラフのハッシュを識別子に使うと完全なグラフ定義を ページのプロパティとして保存. このことから、ウィキのグラフを検索するとき[ Special:PageWithProps]か[//www.mediawiki.org/w/api.php?action=query&list=pageswithprop&continue=&formatversion=2&pwppropname=graph_specs the action API]を用いると簡単に見つけることができます.

グラフ拡張機能はページ上のどこにグラフを配置するか、HTML形式で、タグを含むを出力. サンプル:

タグの 属性は[//www.mediawiki.org/api/rest_v1/page/graph/png/Extension%3AGraph%2FDemo/1686336/d243aa924db2f82926e0f317217fcce591fe8cd4.png 静的なグラフの画像]を提供する#Graphoidサービスを示す.

Graph 拡張機能が対話機能用に構成されていて、クライアント ブラウザーで JavaScript が有効になっていて、ResourceLoader が JavaScript を提供していないレガシー ブラウザーではない場合、クライアント ブラウザーはその場でグラフをレンダリングします. グラフ拡張機能は ResourceLoader の JavaScript モジュールとして Vega ライブラリを含むページに  を呼び込み、グラフ定義の JSON を通称   と呼ばれる JavaScript   変数に組み込む. このモジュールがクライアントのブラウザに読み込まれると、Vega JavaScriptライブラリはを個別のHTMLキャンバスに取り込み、その中にグラフを描画すると静止画像と置き換えます. 2015年11月時点では、ウィキメディアのウィキでは編集のプレビュー以外で、このインタラクティブなレンダラを有効にしていません.

ユーザーはグラフ拡張機能を設定し、常時タグのみ使用するがVegaライブラリやグラフ定義のJSONを参照しないようにできます. このモジュールは が保存後まで更新されないため、編集作業中には作動しません. 一旦保存すると、GraphoidサービスはアクションAPI経由で新しいグラフ定義にアクセスできます.

セキュリティ機能
信用できないデータソース参照を許可しないように、 を設定できます（例: ウィキメディアではウィキメディアのサイト内のデータのみ許可）. また外部データにアクセスするたびに追加の見出しを送ることができ、例えば 見出しにより、MediaWikiはCSRF攻撃を予防します.

ライセンス
VegaライブラリはBSDライセンスの修正版容認の範囲で使用できるものとして配布されます.

BSDライセンスの複写に（容認できる範囲の）微調整を加えたようにも見えます. 使用に際して問題はありませんが、このような変更をライセンスに加えないと理想的です. ライセンスがオープンソースの使用について安全かどうかという（このような）混乱を防ぐためにも、ライセンス条件にこのような改変を行うことは好ましくありません.

wgGraphIsTrusted
もし （既定）なら、Treat-as-Untrustedを返す. つまりヘッダ1件にあらゆるグラフデータのリクエストが対応

wgGraphImgServiceUrl
&lt;img> タグ向けのバックエンド サービス要求 URL を構成する書式文字列. 例えば:

このURLを出力:

//graphoid.wikimedia.org/mediawiki.org/v1/png/Extension:Graph/0/be66c7016b9de3188ef6a585950f10dc83239837.png /{domain}/v1/png/{title}/{revid}/{hash}.png

パラメータの出力順: 1=サーバ、2=題名、3=revid、4=graph-hash-id. どのパラメータもrawurlencodeを用いて回避できる. 値が の場合（既定） urlはまったく生成されない

その他の変数
wgGraphUrlBlacklist変数を787d64a11から削除（2015年12月7日）.

wgGraphDataDomainsはe0813f85aから削除（2016年1月28日）. wgGraphAllowedDomainsを用いること.

wgGraphUserServiceAlways変数はb735f63ff4bから削除（2015年9月30日）.

グラフ名前空間の有効化
を設定すると、グラフの設定を単独ページとしてそれぞれの名前空間に保管できます.

Graphoid サービス
Graphoid（）とはnode.js サービスであり、先進的なブラウザーで使用されるのと等しいVegaライブラリ コードを採用し、グラフの定義から静的な PNG 形式の画像に変換します. そもそもGraphoidが開発された理由は、静止画を提供してページごとにVega ならびに d3 リソースローダーのモジュールをバンドルする必要を解消するためでした. 詳細は T211881 を参照してください. このサービスはウィキメディアのクラスタ上のhttps://www.mediawiki.org/api/rest_v1/#/Page%20content/get_page_graph_png__title___revision___graph_id_によって提供されます.

ユーザー自身によるインストールが可能です.

(注記：このパッケージはメンテナンスが継続しておらず(T211881、インストールが失敗する場合は T196001と T239100を参照. npm i --build-from-source も参照. )

各サービスURLにはページのドメイン名（例＝mediawiki.org）とサービスのバージョン（v1）、グラフが載ったページの題名（PageTitle）とページの更新ID（12345等だが現状は0もあり）、さらにグラフ自体の隠しIDが書かれています（グラフ定義を認識するためHTMLでも使用）. 例を挙げるとすると:

http://localhost:6927/mediawiki.org/v1/PageTitle/12345/a64b022a8fa5b7fc5e40a2c95cd0a114b2ae1174.png (deprecated url)

https://www.mediawiki.org/api/rest_v1/page/graph/png/Extension%3AGraph/3420825/72edc224f0a10b343c1e84f63dbfc97cac9bc957.png

グラフ拡張機能を定義、LocalSettings.phpにおいてGraphoidサービスを線と同時に用いる例

graphoid サービスを設定


このサービスはconfigファイルを使ってさらに設定ができます.

ビジュアルエディターのモジュール
2015年の夏以降、Graph 拡張機能にはビジュアルエディターを使ってグラフを編集するモジュール (ext.graph.VisualEditor) が付与されました.

このモジュールは「Google Summer of Code 2015」プロジェクトの成果です. 詳細は T89287 を参照してください.

利用者はこのモジュールを使い、外部の拡張機能ノードに頼らずとも、VisualEditor内でグラフを見ることができます. ユーザーはさらに、グラフの形式、データやパディングを編集するダイアログを開くことができます. ユーザーインタフェース（UI）ではさらに、ウィキテキスト・エディターに切り替えなくてもビジュアルエディター上でグラフの生JSON定義を直接、編集できます. 熟練したユーザーなら、これを使ってUIのサポートしない設定の微調整も可能です.

この第1ステップは、ビジュアルエディター内でどのようなグラフ編集ができるかという試金石になり、またモジュールとして改善したり伸展する方法が十分にあります.

壊れたグラフのトラブルシューティング
グラフを含むエラーは、開発者コンソールに記録されます.

Error: Bad constructor arguments (T277906)
修正方法 filepath:Earthmap1000x500compac.jpg を filepath:Earthmap1000x500.jpg に置き換える.

例.

TypeError: undefined is not an object (evaluating 'datum.firstYear.value')
To fix: Make sure you have not set default as null

Example.

関連項目

 * — エッジ（枝）で結ばれた複数のノード（頂点）のグラフを表示（このページで解説した拡張機能の表形式ではない）
 * Plotly — オープンソースのJavaScriptグラフ作成ライブラリ（3D作表も可能）
 * D3 — データ駆動型ドキュメント