Работа с диаграммами
Работа с диаграммами
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 | Форматирование заливки, обводки и формы, общие для большинства элементов диаграммы. |