Open main menu

Extension:Graph/ru

This page is a translated version of the page Extension:Graph and the translation is 12% complete.
Other languages:
English • ‎español • ‎français • ‎occitan • ‎русский • ‎中文 • ‎日本語 • ‎한국어
Справка по расширениям MediaWiki
OOjs UI icon advanced.svg
Graph
Статус релиза: стабильный
Реализация Tag , ContentHandler
Описание Data-driven graphs
Автор(ы) Yuri Astrakhan (Yurik обсуждение), Dan Andreescu, Frédéric Bolduc
Лицензия MIT License
Загрузка
Переведите расширение Graph если оно доступно на translatewiki.net
Проверьте использование и версию.
Проблемы Открытые задачи · Сообщить об ошибке

Расширение Graph позволяет тегу <graph> строить визуализации данных, такие как гистограммы, круговые диаграммы, временные шкалы и гистограммы (демо) в формате JSON, который отображает график на основе Vega.

Общая информация

Расширение Graph позволяет добавлять яркие графики на основе Vega на вики-страницы. Графики могут быть как статичными, так и интерактивными.

Самый простой способ добавить график - использовать готовый шаблон, такой как {{Graph:Chart}}. Эти шаблоны скрывают все сложности Vega. Опытные пользователи могут использовать Graph Sandbox для разработки графиков. Графическая песочница позволяет использовать синтаксис вики-шаблонов в дополнение к JSON.

Useful links

Установка

  • Если вы используете Vagrant , установите с помощью vagrant roles enable graph --provision
Ручная установка
  • Requires JsonConfig extension
  • Скачайте и распакуйте файл(ы) в папку с названием Graph в вашей папке extensions/.
  • Добавьте следующий строки в конец файла LocalSettings.php:
    wfLoadExtension( 'Graph' );
    
  •   Готово – Перейдите на страницу Special:Version на своей вики, чтобы удостовериться в том, что расширение успешно установлено.

Для использующих MediaWiki 1.24 или более ранние:

В приведенных выше инструкциях описывается новый способ установки этого расширения с использованием wfLoadExtension()

Если вам нужно установить это расширение на более ранние версии (MediaWiki 1.24 и более ранние), вместо wfLoadExtension( 'Graph' );, вам необходимо использовать:

require_once "$IP/extensions/Graph/Graph.php";

Charts examples

See Demo page for many samples and usage tricks.

 
 
 
 
Historical Fertility Rates

External data

HTTP(S) protocol cannot be used to get data for the graph. Instead, use one of the custom wiki protocols like wikiraw:, wikiapi:, and others.

Graphoid service and Graph extension use GraphAllowedDomains setting to control how these protocols are resolved: 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 phab:T168601).

$wgGraphAllowedDomains = [
    # http + https keys lists all of the domains allowed for the external data access.
    # Any domain listed here automatically permits all subdomains as well.
    # Custom protocols like 'wikiraw' use it to determine which protocol to use.
    # This way wikiraw://en.wikipedia.org/Page will be an api request to https://en.wikipedia.org/w/api.php?action=query&titles=Page&...
    'https' => [ 'wikipedia.org', 'wikimedia.org', ... ],
    'http' => [ 'wmflabs.org', ... ],
    
    # list of domains allowed for the wikirawupload: protocol access.
    # Exact match only, no subdomains.
    'wikirawupload' => [ 'upload.wikimedia.org' ],
    
    # same as wikirawupload but for Wikidata Sparql queries
    'wikidatasparql' => [ 'query.wikidata.org' ],
];

Known bugs & limitations

  • Graph extension bugs
  • Graphoid service bugs
  • Fails to implement ISO 8601 timescales so only Gregorian calendars can be used in timelines
  • Image upscaling on most browsers can be blurry by default. Set the appropriate image-rendering property to solve.

Internals

When parsing, the Graph extension expands all template parameters/expressions, and stores the complete graph definitions in the graph_specs page property, using graph hashes for IDs. This means you can easily locate a wiki's graphs with either Special:PageWithProps or the action API.

The graph extension adds HTML to the page where graphs should go, a <div> containing an <img> tag. Sample:

<div class="mw-wiki-graph-container">
  <img class="mw-wiki-graph-img"
    src="/api/rest_v1/page/graph/png/Extension%3AGraph%2FDemo/1686336/d243aa924db2f82926e0f317217fcce591fe8cd4.png" />
</div>

The <img> tag's href attribute points to the #Graphoid service, which provides a static image of the graph.

If the Graph extension is configured for interactivity, and if the client browser has JavaScript enabled and is not a legacy browser to which ResourceLoader does not ship JavaScript, then the client browser renders graphs on the fly. The Graph extension adds an ext.graph ResourceLoader JavaScript module to the page that includes the Vega library, and puts the JSON of graph definitions into a JavaScript mediaWiki.config variable named wgGraphSpecs. Once the client has loaded this module, the Vega JavaScript library populates each <div> with an HTML canvas and draws the graph in it, replacing the static image. As of ноябрь 2015, Wikimedia wikis only enable this interactive rendering for edit preview.

You can configure the Graph extension to always use just the <img> tag, and not add the Vega libraries or graph definition JSON. This mode will not work during editing, since page_props do not get updated until after the save. Once saved, the Graphoid service will be able to access the new graph definition via the action API.

Security Features

<graph> can be configured to disallow referencing untrusted data sources (e.g. Wikimedia only allows data from the Wikimedia sites). It can also send extra headers whenever accessing external data, e.g. Treat-as-Untrusted header that MediaWiki uses to prevent CSRF attacks.

License

Vega library is distributed under a modified BSD license acceptable under for us to use.

600

Configuration

wgGraphIsTrusted

If false (default), passes Treat-as-Untrusted:1 header with all graph data requests

wgGraphImgServiceUrl

A format string to form a backend service request URL for the <img> tag. For example:

"//graphoid.wikimedia.org/%1\$s/v1/png/%2\$s/%3\$s/%4\$s.png"

Would produce this URL:

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

Parameters will be supplied in this order: 1=server, 2=title, 3=revid, 4=graph-hash-id. All parameters will be escaped with rawurlencode(). If the value is false (default), no <noscript> urls will be generated

wgGraphUrlBlacklist variable has been removed in 787d64a11 (7 Dec 2015), wgGraphDataDomains has been removed in e0813f85a (28 Jan 2016). Use a wgGraphAllowedDomains instead.

wgGraphUserServiceAlways variable has been removed in b735f63ff4b (30 Sep 2015).

Enabling Graph namespace

To store graph definitions as standalone pages in their own namespace, configure JsonConfig .

// See https://www.mediawiki.org/wiki/Extension:JsonConfig
$wgJsonConfigModels['graph.jsonconfig'] = 'graph\Content';
$wgJsonConfigs['graph.jsonconfig'] = array(
	'namespace' => <PICK-A-NS-NUMBER>,
	'nsName' => 'Graph',
	'isLocal' => true,
);

Graphoid service

This section should reference/sync-up with wikitech:Graphoid

Graphoid (git repo) is a node.js service that converts a graph definition into a static PNG image using the same Vega library code that runs in advanced browsers. The reason Graphoid was initially developed was to provide a static image so we wouldn't have to bundle Vega and d3 resource loader modules with every page response. See phab:T211881 for more details. The service is available on the Wikimedia cluster at graphoid.wikimedia.org.

You can install it yourself:

$ git clone https://gerrit.wikimedia.org/r/mediawiki/services/graphoid
$ cd graphoid
$ npm install
$ npm start

The service URLs contain the domain of the page (for example mediawiki.org), service version (v1), the title of the page with the graph (PageTitle), revision ID of the page (12345, but could be 0 for current), and a hash ID of the graph itself (also used in HTML page to identify graph definition), for example:

http://localhost:6927/mediawiki.org/v1/PageTitle/12345/a64b022a8fa5b7fc5e40a2c95cd0a114b2ae1174.png
http://graphoid.wikimedia.org/mediawiki.org/v1/png/Extension:Graph/0/be66c7016b9de3188ef6a585950f10dc83239837.png

You configure the Graph extension to use the Graphoid service in LocalSettings.php with a line like

$wgGraphImgServiceUrl = "//localhost:6927/%1\$s/v1/%2\$s/%3\$s/%4\$s.png";
$wgGraphImgServiceUrl = "//graphoid.wikimedia.org/%1\$s/v1/png/%2\$s/%3\$s/%4\$s.png";

Configure graphoid services

 
Graph extension workflow

You can further configure the service via its config file.

VisualEditor module

Since summer 2015, the Graph extension also comes with a module (ext.graph.VisualEditor) which enables graph editing within VisualEditor.

This module was a result of a Google Summer of Code 2015 project. See phab:T89287 for more details.

This module allows users to see graphs within VisualEditor, as opposed to alien extension nodes. Furthermore, users can open up a dialog to edit a graph's type, data and padding. The UI also offers a way to edit a graph's raw JSON specification within VE without having to switch to the classic wikitext editor, in case more advanced users want to tweak settings not supported by the UI.

This first step serves as a stepping stone for many possibilities with graph editing within VisualEditor, and there are a lot of ways in which the module can be improved and expanded.

See also

  • Extension:GraphViz — for displaying graphs of sets of vertices connected by edges (i.e. not charts, like this extension)
  • Plotly — The open source JavaScript graphing library (with 3d charting capabilities)
  • D3 — Data-Driven Documents