Работа с диаграммами

Работа с диаграммами

Работа с диаграммами

Aspose.Words FOSS для .NET может вставлять родные диаграммы Word — те же DrawingML диаграммы, которые создает сам Word — в виде фигуры на слое рисунка. DocumentBuilder.InsertChart создает фигуру и возвращает её; свойство Chart фигуры раскрывает серии, оси, легенду и форматирование. Это руководство охватывает создание диаграммы, выбор типа диаграммы, работу с сериями и точками данных, оси и сетку, а также форматирование элементов диаграммы.


Создание диаграммы

Вызовите DocumentBuilder.InsertChart(chartType, width, height), чтобы вставить фигуру диаграммы в позицию курсора и получить содержащий Shape. Его свойство Chart представляет объект Chart, который вы настраиваете. Свежевставленная диаграмма содержит демо-серии-заполнители, поэтому очистите Chart.Series перед добавлением реальных данных с помощью ChartSeriesCollection.Add(seriesName, categories, values):

using Aspose.Words;
using Aspose.Words.Drawing.Charts;

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

Shape shape = builder.InsertChart(ChartType.Line, 432, 252);
Chart chart = shape.Chart;

// Delete default generated series.
chart.Series.Clear();

string[] categories = new string[] { "AW Category 1", "AW Category 2", "AW Category 3" };
chart.Series.Add("AW Series 1", categories, new double[] { 4.3, 2.5, 3.5 });

doc.Save("chart.docx");

В этом примере создаётся Document, используется DocumentBuilder.InsertChart(ChartType.Line, 432, 252) для вставки фигуры линейной диаграммы, читается shape.Chart для получения объекта Chart, вызывается chart.Series.Clear() для удаления серии-заполнителя, добавляется одна реальная серия с помощью chart.Series.Add(seriesName, categories, values) и результат записывается с помощью Document.Save.


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

ChartType охватывает стандартные семейства диаграмм Word — Line, Bar, Column (а также их варианты Stacked, PercentStacked и 3D), Pie, PieOfPie, Doughnut, Area, Scatter, Bubble, Radar, Stock, Surface, а также более новые типы диаграмм Word 2016 — Treemap, Sunburst, Histogram, Pareto, BoxAndWhisker и Waterfall. Передайте желаемое значение в качестве аргумента chartType функции InsertChart; изменить тип уже существующей диаграммы после вставки нельзя, кроме замены фигуры.


Серии и точки данных

Chart.Series — это ChartSeriesCollection из ChartSeries объектов. Помимо перегрузки Add(seriesName, categories, values), использованной выше, у ChartSeriesCollection также есть перегрузки для пар значений X/Y, дат и размеров пузырей, а также Insert, Remove(index) и Clear(). Каждый ChartSeries предоставляет DataPoints (это ChartDataPointCollection) для форматирования каждой точки — Format, Marker, Explosion и InvertIfNegative — и HasDataLabels / DataLabels для включения и настройки ChartDataLabelCollection (ShowValue, ShowCategoryName, ShowPercentage, Position).


Оси и линии сетки

Chart.AxisX, AxisY и AxisZ являются объектами ChartAxis (при этом Chart.Axes служит ChartAxisCollection для перебора всех них). Каждая ось имеет HasMajorGridlines / HasMinorGridlines, MajorUnit / MinorUnit (с соответствующими флагами *IsAuto), Crosses / CrossesAt, CategoryType и объект TickLabels (AxisTickLabels) для шрифта подписи и ориентации. ChartAxis.Title (ChartAxisTitle) задает текст подписи оси через его свойства Text и Show.


Легенда, заголовок и таблица данных

Chart.Title (ChartTitle) задает общую подпись диаграммы — Text, Show и Font. Chart.Legend (ChartLegend) управляет тем, появляется ли легенда и где, через Position (значение LegendPosition, например Bottom, Right или Top) и предоставляет отдельные LegendEntries. Chart.DataTable (ChartDataTable) может отображать базовые значения серий в виде таблицы под областью построения, с переключателями Show, HasLegendKeys и границы.


Форматирование элементов диаграммы

Большинство элементов диаграммы — серии, точки данных, оси, заголовок и легенда — предоставляют свойство Format типа ChartFormat, которое, в свою очередь, раскрывает Fill и Stroke для цветов этого элемента, а также ShapeType (ChartShapeType) для форм маркеров точек данных. ChartFormat.SetDefaultFill() возвращает элемент к его стандартному виду, определённому темой.


Советы и лучшие практики

  • Всегда очищайте или заменяйте серию-заполнитель (chart.Series.Clear()) перед добавлением реальных данных — только что вставленная диаграмма уже содержит образцы данных.
  • Используйте перегрузки ChartSeriesCollection.Add, соответствующие структуре ваших данных (категории, пары X/Y, даты или размеры пузырей), вместо того чтобы принудительно передавать всё через пары категория/значение.
  • Установите HasDataLabels = true для серии перед настройкой её коллекции DataLabels — свойства отображения коллекции не оказывают видимого эффекта, пока подписи отключены.
  • Изучите Chart.ChartSpace или проверьте конкретный ChartType, прежде чем полагаться на поведение линий сетки или осей, которое отличается в классических диаграммах и диаграммах в стиле Word-2016.
  • Отдавайте предпочтение ChartFormat.SetDefaultFill() вместо ручного сброса всех свойств заливки, если хотите восстановить внешний вид элемента.

Распространённые проблемы

ПроблемаПричинаИсправление
Новый график показывает неожиданные демонстрационные данныеInsertChart заполняет график placeholder-сериейВызовите chart.Series.Clear() перед добавлением своих собственных серий
Подписи данных не отображаютсяHasDataLabels не был установлен для серии перед настройкой DataLabelsУстановите series.HasDataLabels = true, затем настройте ShowValue/ShowCategoryName на series.DataLabels
Линии сетки не отображаются на оси значенийHasMajorGridlines/HasMinorGridlines по умолчанию имеют значение false для этой осиУстановите chart.AxisY.HasMajorGridlines = true (и HasMinorGridlines, если необходимо)
Легенда не отображаетсяChart.Legend.Position установлен(а) в LegendPosition.NoneУстановите Position в Bottom, Right, Top, Left или TopRight

FAQ

Как вставить диаграмму в документ?

Вызовите DocumentBuilder.InsertChart(chartType, width, height). Он возвращает содержащий Shape; прочитайте его свойство Chart, чтобы настроить диаграмму.

Как добавить данные в диаграмму?

Очистите серию-заполнитель с помощью chart.Series.Clear(), затем вызовите chart.Series.Add(seriesName, categories, values) (или один из других перегруженных методов Add для данных X/Y, даты или пузырьковой диаграммы).

Какие типы диаграмм доступны?

ChartType включает классические семейства (Line, Bar, Column, Pie, Area, Scatter, Bubble, Radar, Stock, Surface, а также их варианты с накоплением и 3D) и типы диаграмм Word 2016 (Treemap, Sunburst, Histogram, Pareto, BoxAndWhisker, Waterfall).

Как изменить положение легенды?

Установите Chart.Legend.Position в значение LegendPosition, например LegendPosition.Bottom или LegendPosition.Right.

Могу ли я оформить отдельную точку данных иначе, чем остальные в её серии?

Да — индексируйтесь в ChartSeries.DataPoints (это ChartDataPointCollection) и задайте Format, Marker или Explosion у этого ChartDataPoint независимо от форматирования на уровне серии.


API Reference Сводка

Класс/МетодОписание:
DocumentBuilder.InsertChartВставляет форму диаграммы в позицию курсора и возвращает её.
ChartОбъект конфигурации диаграммы, доступный через Shape.Chart.
ChartTypeПеречисление доступных типов диаграмм (линейные, столбчатые, круговые и типы диаграмм Word-2016).
ChartSeriesCollection / ChartSeriesРяды данных диаграммы и методы для их добавления, вставки или удаления.
ChartDataPointCollection / ChartDataPointФорматирование отдельных точек в серии.
ChartDataLabelCollection / ChartDataLabelПодписи значений/категорий, отображаемые на точках графика.
ChartAxis / ChartAxisCollectionНастройка осей — сетка, единицы измерения, точка пересечения, подписи делений.
ChartLegend / LegendPositionОтображение и расположение легенды.
ChartTitleОбщая подпись графика.
ChartDataTableНеобязательная таблица значений рядов, отображаемая под областью графика.
ChartFormatФорматирование заливки, обводки и формы, общие для большинства элементов диаграммы.

См. также:

 Русский