Lavorare con i grafici

Il nuovo metodo insert_chart è stato aggiunto alla classe DocumentBuilder. Vediamo quindi come inserire un semplice istogramma nel documento utilizzando il metodo DocumentBuilder.insert_chart:

Come inserire un grafico

In questa sezione impareremo come inserire un grafico in un documento.

Inserisci grafico a colonne

L’esempio di codice seguente mostra come inserire un istogramma:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
# You can specify different chart types and sizes.
shape = builder.insert_chart(aw.drawing.charts.ChartType.COLUMN, 432, 252)
chart = shape.chart
seriesColl = chart.series
print(seriesColl.count)
# Delete default generated series.
seriesColl.clear()
# Create category names array, in this example we have two categories.
categories = [ "Category 1", "Category 2" ]
# Please note, data arrays must not be empty and arrays must be the same size.
seriesColl.add("Aspose Series 1", categories, [ 1, 2 ])
seriesColl.add("Aspose Series 2", categories, [ 3, 4 ])
seriesColl.add("Aspose Series 3", categories, [ 5, 6 ])
seriesColl.add("Aspose Series 4", categories, [ 7, 8 ])
seriesColl.add("Aspose Series 5", categories, [ 9, 10 ])
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.insert_simple_column_chart.docx")

Il codice produce il seguente risultato:

create-column-chart-aspose-words-net

Esistono metodi add, add_double e add_date, che sono stati esposti per coprire tutte le possibili varianti di origini dati per tutti i tipi di grafici:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.COLUMN, 432, 252)
chart = shape.chart
chart.series.add("Aspose Series 1", [ "Category 1", "Category 2" ], [ 1, 2 ])
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.insert_column_chart.docx")

Il codice produce il seguente risultato:

create-column-chart-from-datasource-aspose-words-net

Inserisci grafico a dispersione

L’esempio seguente mostra come inserire un grafico a dispersione.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.SCATTER, 432, 252)
chart = shape.chart
chart.series.add_double("Aspose Series 1", [ 0.7, 1.8, 2.6 ], [ 2.7, 3.2, 0.8 ])
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.insert_scatter_chart.docx")

Il codice produce il seguente risultato:

scatter-chart-aspose-words-net

Inserisci grafico ad area

L’esempio di codice seguente mostra come inserire un grafico ad area:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.AREA, 432, 252)
chart = shape.chart
chart.series.add_date("Aspose Series 1",
[ date(2002, 5, 1), date(2002, 6, 1), date(2002, 7, 1), date(2002, 8, 1), date(2002, 9, 1) ],
[ 32, 32, 28, 12, 15 ])
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.insert_area_chart.docx")

Il codice produce il seguente risultato:

area-chart-aspose-words-net

Inserisci grafico a bolle

L’esempio di codice seguente mostra come inserire un grafico a bolle:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.BUBBLE, 432, 252)
chart = shape.chart
chart.series.add("Aspose Series 1", [ 0.7, 1.8, 2.6 ], [ 2.7, 3.2, 0.8 ], [ 10, 4, 8 ])
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.insert_bubble_chart.docx")

Il codice produce il seguente risultato:

bubble-chart-aspose-words-net

Lavorare con i grafici tramite l’oggetto Shape.chart

Una volta inserito e riempito di dati il grafico, puoi modificarne l’aspetto. La proprietà Shape.chart contiene tutte le opzioni relative al grafico disponibili tramite il API pubblico.

Ad esempio, modifichiamo il comportamento del titolo Chart o della legenda:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.LINE, 432, 252)
chart = shape.chart
chart.title.show = True
chart.title.text = "Line Chart Title"
chart.title.overlay = False
# Please note if None or empty value is specified as title text, auto generated title will be shown.
chart.legend.position = aw.drawing.charts.LegendPosition.LEFT
chart.legend.overlay = True
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.create_chart_using_shape.docx")

Il codice genera i seguenti risultati:

line-chart-aspose-words-net

Come lavorare con ChartSeriesCollection di grafici

Diamo un’occhiata alla raccolta ChartSeries. Tutte le serie di carte sono disponibili tramite la raccolta Chart.series:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
seriesColl = chart.series
print(seriesColl.count)

Puoi rimuovere le serie una per una o cancellarle tutte e aggiungerne una nuova se necessario. Il grafico appena inserito presenta alcune serie predefinite aggiunte a questa raccolta. Per rimuoverli è necessario chiamare il metodo chart.series.clear().

Lavorare con la classe ChartSeries singola

Ecco come lavorare con una serie particolare.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
series0 = chart.series[0]
series1 = chart.series[1]
series0.name = "Chart Series Name 1"
series1.name = "Chart Series Name 2"
# You can also specify whether the line connecting the points on the chart shall be smoothed using Catmull-Rom splines.
series0.smooth = True
series1.smooth = True

Si prega di vedere il risultato qui sotto:

line-chart-chartseries-aspose-words-net

Tutti i singoli ChartSeries hanno opzioni ChartDataPoint predefinite, prova a utilizzare il seguente codice per modificarle:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
# Specifies whether by default the parent element shall inverts its colors if the value is negative.
series0.invert_if_negative = True
series0.marker.symbol = aw.drawing.charts.MarkerSymbol.CIRCLE
series0.marker.size = 15
series1.marker.symbol = aw.drawing.charts.MarkerSymbol.STAR
series1.marker.size = 10

Si prega di vedere il risultato qui sotto:

line-chart-chartdatapoint-aspose-words-net

Come lavorare con il singolo ChartDataPoint di un ChartSeries

Utilizzando ChartDataPoint puoi personalizzare la formattazione di un singolo punto dati della serie di grafici:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.LINE, 432, 252)
chart = shape.chart
series0 = chart.series[0]
series1 = chart.series[1]
dataPointCollection = series0.data_points
dataPoint00 = dataPointCollection[0]
dataPoint01 = dataPointCollection[1]
dataPoint00.explosion = 50
dataPoint00.marker.symbol = aw.drawing.charts.MarkerSymbol.CIRCLE
dataPoint00.marker.size = 15
dataPoint01.marker.symbol = aw.drawing.charts.MarkerSymbol.DIAMOND
dataPoint01.marker.size = 20
dataPoint12 = series1.data_points[2]
dataPoint12.invert_if_negative = True
dataPoint12.marker.symbol = aw.drawing.charts.MarkerSymbol.STAR
dataPoint12.marker.size = 20
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.single_chart_data_point.docx")

Si prega di vedere il risultato qui sotto:

line-chart-datapoint-aspose-words-net

Come lavorare con ChartDataLabel di una singola ChartSeries

Utilizzando ChartDataLabel è possibile specificare la formattazione di una singola etichetta dati della serie di grafici, come mostrare/nascondere LegendKey, CategoryName, SeriesName, Value ecc.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.BAR, 432, 252)
chart = shape.chart
series0 = shape.chart.series[0]
labels = series0.data_labels
labels.show_legend_key = True
# By default, when you add data labels to the data points in a pie chart, leader lines are displayed for data labels that are
# positioned far outside the end of data points. Leader lines create a visual connection between a data label and its
# corresponding data point.
labels.show_leader_lines = True
labels.show_category_name = False
labels.show_percentage = False
labels.show_series_name = True
labels.show_value = True
labels.separator = "/"
labels.show_value = True
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.chart_data_label.docx")

Si prega di vedere il risultato qui sotto:

bar-chart-aspose-words-net

Come definire le opzioni predefinite per ChartDataLabels di ChartSeries

La classe ChartDataLabelCollection definisce le proprietà che possono essere utilizzate per impostare le opzioni predefinite per ChartDataLabels per le serie di grafici. Queste proprietà includono show_category_name, show_bubble_size, show_percentage, show_series_name, show_value ecc.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.PIE, 432, 252)
chart = shape.chart
chart.series.clear()
series = chart.series.add("Aspose Series 1",
[ "Category 1", "Category 2", "Category 3" ],
[ 2.7, 3.2, 0.8 ])
labels = series.data_labels
labels.show_percentage = True
labels.show_value = True
labels.show_leader_lines = False
labels.separator = " - "
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.default_options_for_data_labels.docx")

Si prega di vedere il risultato qui sotto:

pie-chart-aspose-words-net

Come formattare il numero dell’etichetta dei dati del grafico

Utilizzando ChartDataLabel.number_format è possibile specificare la formattazione numerica di una singola etichetta dati del grafico.

Il seguente esempio di codice mostra come formattare un numero dell’etichetta dati:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.LINE, 432, 252)
chart = shape.chart
chart.title.text = "Data Labels With Different Number Format"
# Delete default generated series.
chart.series.clear()
series1 = chart.series.add("Aspose Series 1", [ "Category 1", "Category 2", "Category 3" ], [ 2.5, 1.5, 3.5 ])
series1.has_data_labels = True
series1.data_labels.show_value = True
series1.data_labels[0].number_format.format_code = "\"$\"#,##0.00"
series1.data_labels[1].number_format.format_code = "dd/mm/yyyy"
series1.data_labels[2].number_format.format_code = "0.00%"
# Or you can set format code to be linked to a source cell,
# in this case NumberFormat will be reset to general and inherited from a source cell.
series1.data_labels[2].number_format.is_linked_to_source = True
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.format_number_of_data_label.docx")

Come impostare le proprietà dell’asse del grafico

Se desideri lavorare con l’asse del grafico, il ridimensionamento e le unità di visualizzazione per l’asse dei valori, utilizza le classi ChartAxis, AxisDisplayUnit e AxisScaling.

Il seguente esempio di codice mostra come definire le proprietà degli assi X e Y:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
# Insert chart
shape = builder.insert_chart(aw.drawing.charts.ChartType.AREA, 432, 252)
chart = shape.chart
chart.series.clear()
chart.series.add_date("Aspose Series 1",
[ date(2002, 1, 1), date(2002, 6, 1), date(2002, 7, 1), date(2002, 8, 1), date(2002, 9, 1) ],
[ 640, 320, 280, 120, 150 ])
xAxis = chart.axis_x
yAxis = chart.axis_y
# Change the X axis to be category instead of date, so all the points will be put with equal interval on the X axis.
xAxis.category_type = aw.drawing.charts.AxisCategoryType.CATEGORY
xAxis.crosses = aw.drawing.charts.AxisCrosses.CUSTOM
xAxis.crosses_at = 3 # Measured in display units of the Y axis (hundreds).
xAxis.reverse_order = True
xAxis.major_tick_mark = aw.drawing.charts.AxisTickMark.CROSS
xAxis.minor_tick_mark = aw.drawing.charts.AxisTickMark.OUTSIDE
xAxis.tick_label_offset = 200
yAxis.tick_label_position = aw.drawing.charts.AxisTickLabelPosition.HIGH
yAxis.major_unit = 100
yAxis.minor_unit = 50
yAxis.display_unit.unit = aw.drawing.charts.AxisBuiltInUnit.HUNDREDS
yAxis.scaling.minimum = aw.drawing.charts.AxisBound(100)
yAxis.scaling.maximum = aw.drawing.charts.AxisBound(700)
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.define_xy_axis_properties.docx")

Come impostare il valore temporale Date dell’asse

L’esempio di codice seguente mostra come impostare i valori di data/ora sulle proprietà dell’asse:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.COLUMN, 432, 252)
chart = shape.chart
chart.series.clear()
chart.series.add_date("Aspose Series 1",
[ date(2017, 11, 6), date(2017, 11, 9), date(2017, 11, 15), date(2017, 11, 21), date(2017, 11, 25), date(2017, 11, 29) ],
[ 1.2, 0.3, 2.1, 2.9, 4.2, 5.3 ])
xAxis = chart.axis_x
xAxis.scaling.minimum = aw.drawing.charts.AxisBound(date(2017, 11, 5))
xAxis.scaling.maximum = aw.drawing.charts.AxisBound(date(2017, 12, 3))
# Set major units to a week and minor units to a day.
xAxis.major_unit = 7
xAxis.minor_unit = 1
xAxis.major_tick_mark = aw.drawing.charts.AxisTickMark.CROSS
xAxis.minor_tick_mark = aw.drawing.charts.AxisTickMark.OUTSIDE
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.date_time_values_to_axis.docx")

Come formattare il valore numerico dell’asse

L’esempio di codice seguente mostra come modificare il formato dei numeri sull’asse dei valori:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.COLUMN, 432, 252)
chart = shape.chart
chart.series.clear()
chart.series.add("Aspose Series 1",
[ "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" ],
[ 1900000, 850000, 2100000, 600000, 1500000 ])
chart.axis_y.number_format.format_code = "#,##0"
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.number_format_for_axis.docx")

Come impostare i limiti dell’asse

La classe AxisBound rappresenta un limite minimo o massimo dei valori degli assi. Il limite può essere specificato come valore numerico, data-ora o speciale “automatico”.

L’esempio di codice seguente mostra come impostare i limiti di un asse:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.COLUMN, 432, 252)
chart = shape.chart
chart.series.clear()
chart.series.add("Aspose Series 1",
[ "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" ],
[ 1.2, 0.3, 2.1, 2.9, 4.2 ])
chart.axis_y.scaling.minimum = aw.drawing.charts.AxisBound(0)
chart.axis_y.scaling.maximum = aw.drawing.charts.AxisBound(6)
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.bounds_of_axis.docx")

Come impostare l’unità di intervallo tra le etichette

L’esempio di codice seguente mostra come impostare l’unità di intervallo tra le etichette su un asse:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.COLUMN, 432, 252)
chart = shape.chart
chart.series.clear()
chart.series.add("Aspose Series 1",
[ "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" ],
[ 1.2, 0.3, 2.1, 2.9, 4.2 ])
chart.axis_x.tick_label_spacing = 2
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.interval_unit_between_labels_on_axis.docx")

Come nascondere l’asse del grafico

Se vuoi mostrare o nascondere l’asse del grafico, puoi semplicemente farlo impostando il valore della proprietà ChartAxis.hidden.

L’esempio di codice seguente mostra come nascondere l’asse Y del grafico:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.COLUMN, 432, 252)
chart = shape.chart
chart.series.clear()
chart.series.add("Aspose Series 1",
[ "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" ],
[ 1.2, 0.3, 2.1, 2.9, 4.2 ])
chart.axis_y.hidden = True
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.hide_chart_axis.docx")

Come allineare l’etichetta del grafico

Se desideri impostare un allineamento del testo per le etichette su più righe, puoi semplicemente ottenerlo impostando il valore della proprietà ChartAxis.tick_label_alignment.

L’esempio di codice seguente mostra come selezionare l’allineamento dell’etichetta:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_chart(aw.drawing.charts.ChartType.SCATTER, 450, 250)
axis = shape.chart.axis_x
# This property has effect only for multi-line labels.
axis.tick_label_alignment = aw.ParagraphAlignment.RIGHT
doc.save(docs_base.artifacts_dir + "WorkingWithCharts.tick_multi_line_label_alignment.docx")

Come impostare la formattazione di riempimento e tratto

È possibile impostare la formattazione di riempimento e tratto per serie di grafici, punti dati e indicatori. A tale scopo è necessario utilizzare le proprietà del tipo ChartFormat nelle classi ChartSeries, ChartDataPoint e ChartMarker, nonché gli alias per alcune proprietà, come fore_color, back_color, visible e transparency nella classe Stroke.

L’esempio di codice seguente mostra come impostare il colore della serie:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

shape = builder.insert_chart(aw.drawing.charts.ChartType.COLUMN, 432, 252)

chart = shape.chart
seriesColl = chart.series

# Delete default generated series.
seriesColl.clear()

# Create category names array.
categories = [ "AW Category 1", "AW Category 2" ]

# Adding new series. Value and category arrays must be the same size.
series1 = seriesColl.add("AW Series 1", categories, [ 1, 2 ])
series2 = seriesColl.add("AW Series 2", categories, [ 3, 4 ])
series3 = seriesColl.add("AW Series 3", categories, [ 5, 6 ])

# Set series color.
series1.format.fill.fore_color = drawing.Color.red
series2.format.fill.fore_color = drawing.Color.yellow
series3.format.fill.fore_color = drawing.Color.blue

doc.save(docs_base.artifacts_dir + "WorkingWithCharts.set_series_color.docx")

L’esempio di codice seguente mostra come impostare il colore e lo spessore della linea:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

shape = builder.insert_chart(aw.drawing.charts.ChartType.LINE, 432, 252)

chart = shape.chart
seriesColl = chart.series

# Delete default generated series.
seriesColl.clear()

# Adding new series.
series1 = seriesColl.add_double("AW Series 1", [ 0.7, 1.8, 2.6 ], [ 2.7, 3.2, 0.8 ])
series2 = seriesColl.add_double("AW Series 2", [ 0.5, 1.5, 2.5 ], [ 3, 1, 2 ])

# Set series color.
series1.format.stroke.fore_color = drawing.Color.red
series1.format.stroke.weight = 5
series2.format.stroke.fore_color = drawing.Color.light_green
series2.format.stroke.weight = 5

doc.save(docs_base.artifacts_dir + "WorkingWithCharts.line_color_and_weight.docx")