Jump to content

Расширение:Chart

From mediawiki.org
This page is a translated version of the page Extension:Chart and the translation is 92% complete.
Outdated translations are marked like this.
Справка по расширениям MediaWiki
Chart
Статус релиза: стабильно
Реализация Тег
Описание Отображает диаграммы
Автор(ы) Brooke Vibber, Katie Filbert, Roan Kattouw
Политика совместимости Мастер поддерживает обратную совместимость.
MediaWiki >= 1.47.0
Изменения в БД Нет
  • $wgChartRequestSizeLimit
  • $wgChartProgressiveEnhancement
  • $wgChartWizardEnabled
  • $wgChartTransformsEnabled
  • $wgChartServiceUrl
  • $wgChartCliPath
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's helmfile.d/services/chart-renderer/values.yaml to reference the new version
    • get it +2'd by a deployer
  • (as a deployer) log into deployment.codfw.wmnet or deployment.eqiad.wmnet depending 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.

Data:Example.chart
{
    "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:

Wikipedia article title
{{#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
        ]
    ]
}

Пример графика и исходных данных с годами на х:

Подробнее о поддержке дат см. ADR Поддержка дат в gerrit.

Настройка

Y axisColor number0200400600800100012001#4b77d6#eeb533#fd7865#80cdb3#269f4b#b0c1f0#9182c2#d9b4cd#b0832b#a2a9b1Color Исходные данные
Десять доступных цветов и их коды.

Возможности настройки диаграмм в настоящее время ограничены. Есть надежда, что после тестирования, обсуждения и оценки будут найдены решения по настройке, которые не помешают корректному отображению на разных устройствах и не создадут проблем с доступностью.

Размеры

В настоящее время диаграммы занимают всю ширину родительского контейнера. There is no way to adjust the height.

Цель — обеспечить возможность удобного отображения диаграмм на большинстве устройств. Более подробно см. T376845.

Темы

В настоящее время поддерживается только одна цветовая палитра. Она была разработана с акцентом на доступность для людей с различным цветовосприятием. С идеями, лежащими в основе выбора цвета, можно ознакомиться на T369863.

Иногда могут понадобиться специфические цвета, например — цвета партий в диаграммах на политические темы. Остается открытым вопрос о том, как в таких случаях поступать, чтобы не создавать проблем людям с особенностями цветовосприятия.

Предупреждение

Обратите внимание: хотя в настоящее время диаграммы сохраняются как SVG, который можно стилизовать с помощью механизма TemplateStyles, такой способ считается нежелательным, потому что способ отрисовки может измениться в любой момент. Не полагайтесь на CSS чтобы изменять внешний вид диаграммы, так как это может привести к неработоспособности диаграмм в будущем или помешать работе функций доступности, изменяющих размер шрифта, а также таких функций, как темная тема.

Интернационализация

Диаграммы могут отображаться только на языке содержимого вики. Ключевое слово «uselang» (например, ?uselang=es) не влияет отрисовку.

Формат определения диаграммы позволяет задать поясняющий текст, включая заголовки и подписи, сразу на нескольких языках, что позволяет использовать одну диаграмму в разных вики. Пример отображения многоязыковой диаграммы в испаноязычной вики.

Известные проблемы

Доска проекта Charts на Phabricator, отобраны записи с проблемами.

Типы диаграмм

Для любой диаграммы данные должны быть организованы в виде массивов, в которых первым идёт значение по оси x-axis, а следом перечисляются соответствующие ему значения по оси y-axis для каждого графика.

Линейная диаграмма

%supportDate0102030405009.09.199326.09.199319.10.1993ElvesEntsOrcsHobbitsTrollsExample Line ChartExample subtitle Исходные данные
Пример линейного графика.

В следующем примере {{#chart: }} помещён внутрь {{Image frame }}, чтобы ограничить его ширину и добавить подпись. Также в график добавлена ссылка на исходные данные в виде таблицы, куда также можно поместить информацию об истониках:

Wikipedia article title
{{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.
}}

Смотрите, какой получился график.

Столбчатая диаграмма

Здесь диаграмма растянута на всю доступную ширину страницы:

Wikipedia article title
{{#chart:Example.Bar.chart}} <div align="center">[[commons:Data:Chart Example Data.tab|'''Raw data''']]</div>

Результат:

%supportDate0102030405009.09.199326.09.199319.10.1993ElvesEntsOrcsHobbitsTrollsExample Bar ChartExample subtitle

График с заполнением областей

%supportDate02040608010009.09.199326.09.199319.10.1993ElvesEntsOrcsHobbitsTrollsExample Area ChartExample subtitle

Круговая диаграмма

Круговые диаграммы очень специфичны, поэтому исходные данные обрабатываются по-особенному.

Все столбцы, содержащие данные, отличные от числовых (например, таковые часто помещают на ось x) будут отброшены, а круговая диаграмма будет построена исходя из суммы оставшихся значений.

Например, если несколько строк отображают значения для A, B и C для нескольких дат (например, 1 января и 2 января), сегмент круговой диаграммы для A будет представлять собой сумму всех значений строк A за эти даты.

0102030405009.09.199326.09.199308.10.199322.10.1993ElvesEntsOrcsHobbitsTrollsExample Pie ChartOrcs and Hobbits

Поиск существующих диаграмм

Готовые диаграммы, которые можно использовать в статьях, можно взять с Викисклада и отслеживать с помощью механизма категорий.

Можно воспользоваться этим запросом, чтобы найти готовые диаграммы, при необходимости добавить перевод, а этим — для поиска таблиц, по которым можно строить графики.

Набор вики-страниц, которые используют диаграммы в любой конкретной вики, можно найти в категории, название которой определено в 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 портирует графики из английской Википедии в диаграммы.

См. также