Расширение:Chart
Support level: Pending The support level for this extension is currently under review. The Reader Growth Team is the maintainer of last resort for the time being. |
Статус релиза: стабильно |
|
|---|---|
| Реализация | Тег |
| Описание | Отображает диаграммы |
| Автор(ы) | Brooke Vibber, Katie Filbert, Roan Kattouw |
| Политика совместимости | Мастер поддерживает обратную совместимость. |
| MediaWiki | >= 1.47.0 |
| Изменения в БД | Нет |
|
|
| Licence | GNU General Public License 3.0 or later |
| Скачать | README |
| Переведите расширение Chart, если оно доступно на translatewiki.net | |
| Проблемы | Открытые задачи · Сообщить об ошибке |
Расширение Chart предоставляет базовые возможности интерактивной визуализации данных, призванные заменить некоторые, но не все аспекты расширения Graph. Это расширение в настоящее время находится в стадии разработки для вики-проектов Викимедиа. Более подробную информацию о процессе разработки см. на странице Extension:Chart/Project.
Это расширение поддерживает следующие типы диаграмм:
Установка
Для расширения Chart требуется установить расширение JsonConfig, а также загрузить библиотеку JavaScript (на самом деле TypeScript) Chart Renderer.
Полные инструкции по настройке см. в файле README.md в репозитории.
Wikimedia production
Для использования в продуктивной среде Wikimedia см. общие инструкции по развертыванию сервиса в разделе wikitech:Kubernetes/Deployments#Cheatsheet. Key bits here:
- find your commit's build image id from
chart-renderer's CI, eg "2025-06-24-201619-production"- edit
deployment-charts'shelmfile.d/services/chart-renderer/values.yamlto reference the new version - get it +2'd by a deployer
- edit
- (as a deployer) log into
deployment.codfw.wmnetordeployment.eqiad.wmnetdepending on the active data center$ cd /srv/deployment-charts/helmfile.d/services/chart-renderer- latest service config should appear within a couple minutes (there's a regular update job)
$ helmfile -e staging -i apply --context 5- confirm the changes and let it deploy to staging
- test rendering on beta cluster
- TODO: add a specific page with our planned live test charts
- TODO: add directions on checking pixel rendering results
- once confirmed good, deploy to main clusters:
$ helmfile -e codfw -i apply --context 5- confirm the changes and let it deploy to codfw
$ helmfile -e eqiad -i apply --context 5- confirm the changes and let it deploy to eqiad
Как пользоваться
Чтобы добавить на страницу диаграмму, необходимо сначала задать табличные данные, по которым эта диаграмма будет строиться. Эти данные задаются в виде относительно простого JSON-файла. Подробнее о синтаксисе см. в Extension:Chart/Specification.
Все графики в этом примере построены на основе следующего набора: пусть Data:Chart Example Data.tab — некий фантастический набор данных. Другие примеры можно найти в директории sample.
{
"license": "CC0-1.0",
"version": 1,
"source": "Chart Example Data.tab",
"type": "line",
"title": {
"en": "Example Chart Title"
},
"subtitle": {
"en": "Example Subtitle"
},
"xAxis": {
"title": {
"en": "Example X Axis Title"
},
"format": "none"
},
"yAxis": {
"title": {
"en": "Example Y Axis Title"
},
"format": "none"
},
"mediawikiCategories": [
{
"name": "Example category",
"sort": "Its sortkey"
}
],
"transform": {
"module": "Optional lua module for data transforms",
"function": "transform_func",
"args": {
"arg_name": "arg_value"
}
}
}
После того, как данные заданы, можно нарисовать график с помощью функции парсера #chart. В этом случае данные будут браться из Data:Chart Example Data.tab, а инструкции по отрисовке диаграммы — в Data:Example.Line.chart:
{{#chart:Example.Line.chart}}
Обратите внимание: определение диаграммы и данные задаются независимо. Можно использовать одно определение с разными данными, например:
{{#chart:Population through years.chart
|data=Population of USA.tab
}}
{{#chart:Population through years.chart
|data=Population of UK.tab
}}
{{#chart:Population through years.chart
|data=Population of Poland.tab
}}
Deprecated formats
The Chart definition JSON format originally allowed the title to be a plain string, rather than an object with localized title strings.
xAxis and yAxis title fields also supported plain strings, but is now deprecated.
Deprecated:
{
"license": "CC0-1.0",
"description": {
"en": "1993 Canadian federal election"
},
"title": "Example chart",
"xAxis": {
"title": "month"
},
"yAxis": {
"title": "votes"
},
}
This should instead be:
{
"license": "CC0-1.0",
"description": {
"en": "1993 Canadian federal election"
},
"title": {
"en": "Example chart"
},
"xAxis": {
"title": {
"en": "month"
}
},
"yAxis": {
"title": {
"en": "votes"
}
},
}
Форматы дат в табличных данных
Currently the extension doesn't properly support date formats, but is able to show dates in a string format (numbers not supported) on the X-Axis when configured as such. Если даты в созданной диаграмме нужно расположить по оси x, каждая дата должна содержать 10 символов в следующем формате:
YYYY-MM-DD, например,2025-10-20
This means the date format of Wikidata is for example not supported at the moment.
Если задавать даты в другом формате, поддерживаемом функцией Date.parse() JavaScript (но обязательно из 10 символов), это может сработать, но официально такая возможность не поддерживается.
Если в первой колонке будут обнаружены даты, при отрисовке они будут преобразованы в локализованный формат, в соответствии с языком содержания соответствующей вики. Below is an example that shows a date format that will correctly display.
{
"license": "CC0-1.0",
"description": {
"en": "1993 Canadian federal election"
},
"mediawikiCategories": [
{
"name": "Data:.tab",
"sort": ""
},
{
"name": "Data:Examples.tab",
"sort": ""
}
],
"schema": {
"fields": [
{
"name": "date",
"type": "string",
"title": {
"en": "Date",
"fr": "Date"
}
},
{
"name": "pc",
"type": "number",
"title": {
"en": "PC",
"fr": "PC"
}
},
{
"name": "liberal",
"type": "number",
"title": {
"en": "Liberal",
"fr": "Libéral"
}
},
{
"name": "ndp",
"type": "number",
"title": {
"en": "NDP",
"fr": "NPD"
}
},
{
"name": "bq",
"type": "number",
"title": {
"en": "BQ",
"fr": "BQ"
}
},
{
"name": "reform",
"type": "number",
"title": {
"en": "Reform",
"fr": "Réform"
}
}
]
},
"data": [
[
"1993-09-09",
35,
37,
8,
8,
10
],
[
"1993-09-14",
36,
33,
8,
10,
11
],
[
"1993-09-20",
35,
35,
6,
11,
11
]
]
}
См. примеры на сайте Commons:
Годы должны быть заданы в виде чисел:
{
"license": "CC0-1.0",
"description": {
"en": "New Zealand annual wine production, in millions of litres"
},
"sources": "Statistics from New Zealand Winegrowers 1998–2024 annual reports",
"schema": {
"fields": [
{
"name": "year",
"type": "number",
"title": {
"en": "Year"
}
},
{
"name": "production",
"type": "number",
"title": {
"en": "Wine produced (million litres)"
}
}
]
},
"data": [
[
1990,
54.4
],
[
1991,
49.9
],
[
1992,
41.6
],
[
1993,
32.5
],
[
1994,
41.1
],
[
1995,
56.4
]
]
}
Пример графика и исходных данных с годами на х:
- commons:Data:New_Zealand_Annual_Wine_Production.tab
- commons:Data:New_Zealand_Annual_Wine_Production.chart
Подробнее о поддержке дат см. ADR Поддержка дат в gerrit.
Настройка
Возможности настройки диаграмм в настоящее время ограничены. Есть надежда, что после тестирования, обсуждения и оценки будут найдены решения по настройке, которые не помешают корректному отображению на разных устройствах и не создадут проблем с доступностью.
Размеры
В настоящее время диаграммы занимают всю ширину родительского контейнера. There is no way to adjust the height.
Цель — обеспечить возможность удобного отображения диаграмм на большинстве устройств. Более подробно см. T376845.
Темы
В настоящее время поддерживается только одна цветовая палитра. Она была разработана с акцентом на доступность для людей с различным цветовосприятием. С идеями, лежащими в основе выбора цвета, можно ознакомиться на T369863.
Иногда могут понадобиться специфические цвета, например — цвета партий в диаграммах на политические темы. Остается открытым вопрос о том, как в таких случаях поступать, чтобы не создавать проблем людям с особенностями цветовосприятия.
Предупреждение
Обратите внимание: хотя в настоящее время диаграммы сохраняются как SVG, который можно стилизовать с помощью механизма TemplateStyles, такой способ считается нежелательным, потому что способ отрисовки может измениться в любой момент. Не полагайтесь на CSS чтобы изменять внешний вид диаграммы, так как это может привести к неработоспособности диаграмм в будущем или помешать работе функций доступности, изменяющих размер шрифта, а также таких функций, как темная тема.
Интернационализация
Диаграммы могут отображаться только на языке содержимого вики. Ключевое слово «uselang» (например, ?uselang=es) не влияет отрисовку.
Формат определения диаграммы позволяет задать поясняющий текст, включая заголовки и подписи, сразу на нескольких языках, что позволяет использовать одну диаграмму в разных вики. Пример отображения многоязыковой диаграммы в испаноязычной вики.
Известные проблемы
Доска проекта Charts на Phabricator, отобраны записи с проблемами.
Типы диаграмм
Для любой диаграммы данные должны быть организованы в виде массивов, в которых первым идёт значение по оси x-axis, а следом перечисляются соответствующие ему значения по оси y-axis для каждого графика.
Линейная диаграмма
В следующем примере {{#chart: }} помещён внутрь {{Image frame}}, чтобы ограничить его ширину и добавить подпись.
Также в график добавлена ссылка на исходные данные в виде таблицы, куда также можно поместить информацию об истониках:
{{image frame
|content={{#chart:Example.Line.chart}} [[commons:Data:Chart Example Data.tab|'''Raw data''']]
|width = 340
|caption = This is an example of a line chart.
}}
Смотрите, какой получился график.
Столбчатая диаграмма
Здесь диаграмма растянута на всю доступную ширину страницы:
{{#chart:Example.Bar.chart}} <div align="center">[[commons:Data:Chart Example Data.tab|'''Raw data''']]</div>
Результат:
График с заполнением областей
Круговая диаграмма
Круговые диаграммы очень специфичны, поэтому исходные данные обрабатываются по-особенному.
Все столбцы, содержащие данные, отличные от числовых (например, таковые часто помещают на ось x) будут отброшены, а круговая диаграмма будет построена исходя из суммы оставшихся значений.
Например, если несколько строк отображают значения для A, B и C для нескольких дат (например, 1 января и 2 января), сегмент круговой диаграммы для A будет представлять собой сумму всех значений строк A за эти даты.
Поиск существующих диаграмм
Готовые диаграммы, которые можно использовать в статьях, можно взять с Викисклада и отслеживать с помощью механизма категорий.
Можно воспользоваться этим запросом, чтобы найти готовые диаграммы, при необходимости добавить перевод, а этим — для поиска таблиц, по которым можно строить графики.
Набор вики-страниц, которые используют диаграммы в любой конкретной вики, можно найти в категории, название которой определено в MediaWiki:chart-render-category и MediaWiki:Chart-error-category (Category:Pages using the Chart extension и Category:Pages using the Chart extension with rendering errors в этой вики). Не забудьте создать и подключить к Викиданным категории d:Q131382738 и d:Q131406605 в вашей Вики, чтобы упростить интервики-поиск.
Переход с расширения Graph
Пожалуйста, ознакомьтесь с категорией «Страницы с отключёнными графиками» на разных языках, и помогите перенести отрисовку графиков со старого механизма на новый. Возможно, некоторые из них уже были удалены без замены на новые. Список можно сравнить с архивом от 2023 года, содержащим 200 из 23 811 страниц Английской Википедии, в которых были отключены графики — он был составлен вскоре после того, как шаблоны были добавлены в эту категорию, и возможно найдёте схожие страницы на других языках.
Техническая документация
Учитывая проблемы с Расширение:Graph, все решения относительно нового расширения были тщательно взвешены, с надеждой на укрепление доверия и уверенности в его замене.
На данный момент технические решения задокументированы в репозитории кода в папке /doc/adr.
Отслеживание ошибок
Страницы .chart, не прошедшие проверку, автоматически попадают в commons:Category:Pages using the Chart extension with rendering errors. Вики-страницы с некорректными диаграммами автоматически сохраняются в Категория:Страницы с ошибками рендеринга расширения Chart на разных языках.
Ошибки при отображении диаграммы на стороне клиента будут регистрироваться в logstash. (Только для разработчиков.)
Инструменты для создания диаграмм
Существует несколько возможных методов полуавтоматического создания и редактирования диаграмм и их табличных данных:
- Скрипт graphDataImport можно использовать, чтобы извлечь данные из существующих шаблонов «Chart» и аналогичных, чтобы преобразовать их в .tab — таблицу, .chart — описание и новый викитекст.
- Можно использовать ИИ, чтобы извлекать данные из викикода и таблиц, а потом преобразовывать его в страницы .tab и .chart и генерировать новый викикод. Также его можно использовать, чтобы переводить обозначения и дополнять .tab-таблицы новыми данными.
- Гаджет TabularImportExport может конвертировать файлы Excel и .csv в .tab и обратно. Вы можете активировать его через настройки Commons.
- Пользовательский интерфейс JSON
Править таблицу(часть расширения Jsonconfig) доступен на странице редактирования .tab. - Некоторые боты могут периодически импортировать статистику из Интернета или из существующих графиков Википедии в .tab или .chart по запросу. Среди них — DPLA bot и SLiuBot.
- GraphBot портирует графики из английской Википедии в диаграммы.
См. также
- Extension:Chart/Project/FAQ – Часто задаваемые вопросы
- Transforms
| Это расширение используется в одном или нескольких проектах Викимедиа. Вероятно, это означает, что расширение стабильно и работает достаточно хорошо, чтобы использоваться такими сайтами с высоким трафиком. Найдите название этого расширения в файлах конфигурации Викимедиа CommonSettings.php и InitialiseSettings.php, чтобы узнать, где оно установлено. Полный список расширений, установленных на конкретной вики, можно увидеть на странице Special:Version wiki. |
- Extensions maintained by Reader Teams/ru
- Extensions maintained by Reader Growth/ru
- Extensions maintained by Reader Teams - Level Pending/ru
- Stable extensions/ru
- Tag extensions/ru
- ChangeTagsListActive extensions/ru
- LinksUpdateComplete extensions/ru
- ListDefinedTags extensions/ru
- PageSaveComplete extensions/ru
- ParserFirstCallInit extensions/ru
- RecentChange save extensions/ru
- SkinTemplateNavigation::Universal extensions/ru
- SpecialPage initList extensions/ru
- GPL licensed extensions/ru
- Extensions in Wikimedia version control/ru
- All extensions/ru
- Extensions used on Wikimedia/ru
