使用 C++ 设置图表外观
设置图表外观
在《如何创建图表》中,我们简要介绍了Aspose.Cells提供的图表类型和图表对象,并描述了如何创建一个图表。本文讨论了如何通过设置图表属性来自定义图表的外观:
- 设置图表区域。
- 设置图表线条。
- 应用主题。
- 为图表和轴设置标题。
- 使用网格线。
设置图表区域
图表中有不同类型的区域,Aspose.Cells提供了修改每个区域外观的灵活性。开发人员可以通过改变前景色、背景色和填充格式等设置,在一个区域上应用不同的格式设置。
在下面的示例中,我们在图表的不同区域应用了不同的格式设置。这些区域包括:
- 绘图区域
- 图表区域
- SeriesCollection区域
- SeriesCollection中单个点的区域
以下代码段演示了如何设置图表区域。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Charts;
using namespace Aspose::Cells::Drawing;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create workbook
Workbook workbook;
// Adding a new worksheet to the Workbook object
int sheetIndex = workbook.GetWorksheets().Add();
// Obtaining the reference of the newly added worksheet by passing its sheet index
Worksheet worksheet = workbook.GetWorksheets().Get(sheetIndex);
// Adding sample values to cells
worksheet.GetCells().Get(u"A1").PutValue(50);
worksheet.GetCells().Get(u"A2").PutValue(100);
worksheet.GetCells().Get(u"A3").PutValue(150);
worksheet.GetCells().Get(u"B1").PutValue(60);
worksheet.GetCells().Get(u"B2").PutValue(32);
worksheet.GetCells().Get(u"B3").PutValue(50);
// Adding a chart to the worksheet
int chartIndex = worksheet.GetCharts().Add(ChartType::Column, 5, 0, 15, 5);
// Accessing the instance of the newly added chart
Chart chart = worksheet.GetCharts().Get(chartIndex);
// Adding SeriesCollection (chart data source) to the chart ranging from "A1" cell to "B3"
chart.GetNSeries().Add(u"A1:B3", true);
// Setting the foreground color of the plot area
chart.GetPlotArea().GetArea().SetForegroundColor(Color::Blue());
// Setting the foreground color of the chart area
chart.GetChartArea().GetArea().SetForegroundColor(Color::Yellow());
// Setting the foreground color of the 1st SeriesCollection area
chart.GetNSeries().Get(0).GetArea().SetForegroundColor(Color::Red());
// Setting the foreground color of the area of the 1st SeriesCollection point
chart.GetNSeries().Get(0).GetPoints().Get(0).GetArea().SetForegroundColor(Color::Cyan());
// Filling the area of the 2nd SeriesCollection with a gradient
chart.GetNSeries().Get(1).GetArea().GetFillFormat().SetOneColorGradient(Color::Lime(), 1, GradientStyleType::Horizontal, 1);
// Saving the Excel file
workbook.Save(outDir + u"book1.out.xls");
Aspose::Cells::Cleanup();
}
设置图表线条
开发者还可以对 SeriesCollection 的线条或数据标记应用各种样式。以下代码演示了如何使用Aspose.Cells API设置图表线条。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Charts;
using namespace Aspose::Cells::Drawing;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create workbook
Workbook workbook;
// Adding a new worksheet to the Workbook object
int sheetIndex = workbook.GetWorksheets().Add();
// Obtaining the reference of the newly added worksheet by passing its sheet index
Worksheet worksheet = workbook.GetWorksheets().Get(sheetIndex);
// Adding sample values to cells
worksheet.GetCells().Get(u"A1").PutValue(50);
worksheet.GetCells().Get(u"A2").PutValue(100);
worksheet.GetCells().Get(u"A3").PutValue(150);
worksheet.GetCells().Get(u"B1").PutValue(60);
worksheet.GetCells().Get(u"B2").PutValue(32);
worksheet.GetCells().Get(u"B3").PutValue(50);
// Adding a chart to the worksheet
int chartIndex = worksheet.GetCharts().Add(ChartType::Column, 5, 0, 15, 5);
// Accessing the instance of the newly added chart
Chart chart = worksheet.GetCharts().Get(chartIndex);
// Adding SeriesCollection (chart data source) to the chart ranging from "A1" cell to "B3"
chart.GetNSeries().Add(u"A1:B3", true);
// Setting the foreground color of the plot area
chart.GetPlotArea().GetArea().SetForegroundColor(Color::Blue());
// Setting the foreground color of the chart area
chart.GetChartArea().GetArea().SetForegroundColor(Color::Yellow());
// Setting the foreground color of the 1st SeriesCollection area
chart.GetNSeries().Get(0).GetArea().SetForegroundColor(Color::Red());
// Setting the foreground color of the area of the 1st SeriesCollection point
chart.GetNSeries().Get(0).GetPoints().Get(0).GetArea().SetForegroundColor(Color::Cyan());
// Filling the area of the 2nd SeriesCollection with a gradient
chart.GetNSeries().Get(1).GetArea().GetFillFormat().SetOneColorGradient(Color::Lime(), 1, GradientStyleType::Horizontal, 1);
// Applying a dotted line style on the lines of a SeriesCollection
chart.GetNSeries().Get(0).GetBorder().SetStyle(LineType::Dot);
// Applying a triangular marker style on the data markers of a SeriesCollection
chart.GetNSeries().Get(0).GetMarker().SetMarkerStyle(ChartMarkerType::Triangle);
// Setting the weight of all lines in a SeriesCollection to medium
chart.GetNSeries().Get(1).GetBorder().SetWeight(WeightType::MediumLine);
// Saving the Excel file
workbook.Save(outDir + u"book1.out.xls");
std::cout << "Chart created successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
将Microsoft Excel 2007/2010主题应用于图表
开发者可以将不同的微软Excel主题/颜色应用到 SeriesCollection 或其他图表对象,如示例所示。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Drawing;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Path of input excel file
U16String inputFilePath = srcDir + u"book1.xlsx";
// Path of output excel file
U16String outputFilePath = outDir + u"output.out.xlsx";
// Instantiate the workbook to open the file that contains a chart
Workbook workbook(inputFilePath);
// Get the first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(1);
// Get the first chart in the sheet
Chart chart = worksheet.GetCharts().Get(0);
// Specify the FillFormat's type to Solid Fill of the first series
chart.GetNSeries().Get(0).GetArea().GetFillFormat().SetFillType(FillType::Solid);
// Get the CellsColor of SolidFill
CellsColor cc = chart.GetNSeries().Get(0).GetArea().GetFillFormat().GetSolidFill().GetCellsColor();
// Create a theme in Accent style
cc.SetThemeColor(ThemeColor(ThemeColorType::Accent6, 0.6));
// Apply the theme to the series
chart.GetNSeries().Get(0).GetArea().GetFillFormat().GetSolidFill().SetCellsColor(cc);
// Save the Excel file
workbook.Save(outputFilePath);
std::cout << "Chart theme applied successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
设置图表或坐标轴的标题
你可以使用微软Excel在直观的环境中设置图表及其轴的标题。Aspose.Cells也允许开发者在运行时设置图表及其轴的标题。所有图表及轴都包含一个 Title 属性,可用于设置标题,如下面的示例所示。
以下代码段演示了如何设置图表和轴的标题。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Charts;
using namespace Aspose::Cells::Drawing;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create workbook
Workbook workbook;
// Adding a new worksheet to the Workbook object
int sheetIndex = workbook.GetWorksheets().Add();
// Obtaining the reference of the newly added worksheet by passing its sheet index
Worksheet worksheet = workbook.GetWorksheets().Get(sheetIndex);
// Adding sample values to cells
worksheet.GetCells().Get(u"A1").PutValue(50);
worksheet.GetCells().Get(u"A2").PutValue(100);
worksheet.GetCells().Get(u"A3").PutValue(150);
worksheet.GetCells().Get(u"B1").PutValue(60);
worksheet.GetCells().Get(u"B2").PutValue(32);
worksheet.GetCells().Get(u"B3").PutValue(50);
// Adding a chart to the worksheet
int chartIndex = worksheet.GetCharts().Add(ChartType::Column, 5, 0, 15, 5);
// Accessing the instance of the newly added chart
Chart chart = worksheet.GetCharts().Get(chartIndex);
// Adding SeriesCollection (chart data source) to the chart ranging from "A1" cell to "B3"
chart.GetNSeries().Add(u"A1:B3", true);
// Setting the foreground color of the plot area
chart.GetPlotArea().GetArea().SetForegroundColor(Color::Blue());
// Setting the foreground color of the chart area
chart.GetChartArea().GetArea().SetForegroundColor(Color::Yellow());
// Setting the foreground color of the 1st SeriesCollection area
chart.GetNSeries().Get(0).GetArea().SetForegroundColor(Color::Red());
// Setting the foreground color of the area of the 1st SeriesCollection point
chart.GetNSeries().Get(0).GetPoints().Get(0).GetArea().SetForegroundColor(Color::Cyan());
// Filling the area of the 2nd SeriesCollection with a gradient
chart.GetNSeries().Get(1).GetArea().GetFillFormat().SetOneColorGradient(Color::Lime(), 1, GradientStyleType::Horizontal, 1);
// Setting the title of a chart
chart.GetTitle().SetText(u"Title");
// Setting the font color of the chart title to blue
chart.GetTitle().GetFont().SetColor(Color::Blue());
// Setting the title of category axis of the chart
chart.GetCategoryAxis().GetTitle().SetText(u"Category");
// Setting the title of value axis of the chart
chart.GetValueAxis().GetTitle().SetText(u"Value");
// Saving the Excel file
workbook.Save(outDir + u"book1.out.xls");
std::cout << "Chart created successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
使用主要网格线
可以自定义主要网格线的外观。隐藏或显示网格线,或定义它们的颜色和其他设置。下面,我们展示如何隐藏网格线以及如何更改它们的颜色。
隐藏主要网格线
开发者可以通过设置 Line 对象的 IsVisible 属性,控制主要网格线的可见性,值为 true 或 false。
以下代码片段演示如何隐藏主要网格线。隐藏主要网格线后,工作表将添加一个没有网格线的柱状图。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Charts;
using namespace Aspose::Cells::Drawing;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create a workbook object
Workbook workbook;
// Adding a new worksheet to the Workbook object
int sheetIndex = workbook.GetWorksheets().Add();
// Obtaining the reference of the newly added worksheet by passing its sheet index
Worksheet worksheet = workbook.GetWorksheets().Get(sheetIndex);
// Adding sample values to cells
worksheet.GetCells().Get(u"A1").PutValue(50);
worksheet.GetCells().Get(u"A2").PutValue(100);
worksheet.GetCells().Get(u"A3").PutValue(150);
worksheet.GetCells().Get(u"B1").PutValue(60);
worksheet.GetCells().Get(u"B2").PutValue(32);
worksheet.GetCells().Get(u"B3").PutValue(50);
// Adding a chart to the worksheet
int chartIndex = worksheet.GetCharts().Add(ChartType::Column, 5, 0, 15, 5);
// Accessing the instance of the newly added chart
Chart chart = worksheet.GetCharts().Get(chartIndex);
// Adding SeriesCollection (chart data source) to the chart ranging from "A1" cell to "B3"
chart.GetNSeries().Add(u"A1:B3", true);
// Setting the foreground color of the plot area
chart.GetPlotArea().GetArea().SetForegroundColor(Color::Blue());
// Setting the foreground color of the chart area
chart.GetChartArea().GetArea().SetForegroundColor(Color::Yellow());
// Setting the foreground color of the 1st SeriesCollection area
chart.GetNSeries().Get(0).GetArea().SetForegroundColor(Color::Red());
// Setting the foreground color of the area of the 1st SeriesCollection point
chart.GetNSeries().Get(0).GetPoints().Get(0).GetArea().SetForegroundColor(Color::Cyan());
// Filling the area of the 2nd SeriesCollection with a gradient
chart.GetNSeries().Get(1).GetArea().GetFillFormat().SetOneColorGradient(Color::Lime(), 1, GradientStyleType::Horizontal, 1);
// Hiding the major gridlines of Category Axis
chart.GetCategoryAxis().GetMajorGridLines().SetIsVisible(false);
// Hiding the major gridlines of Value Axis
chart.GetValueAxis().GetMajorGridLines().SetIsVisible(false);
// Saving the Excel file
workbook.Save(outDir + u"book1.out.xls");
std::cout << "Chart created successfully!" << std::endl;
Aspose::Cells::Cleanup();
}
更改主要网格线设置
开发人员不仅可以控制主要网格线的可见性,还可以控制其他属性,包括颜色等。
以下代码片段演示如何更改主要网格线的颜色。设置主要网格线的颜色后,工作表将添加一个具有修改网格线的柱状图。
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Charts;
using namespace Aspose::Cells::Drawing;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create a workbook object
Workbook workbook;
// Adding a new worksheet to the Workbook object
int sheetIndex = workbook.GetWorksheets().Add();
// Obtaining the reference of the newly added worksheet by passing its sheet index
Worksheet worksheet = workbook.GetWorksheets().Get(sheetIndex);
// Adding sample values to cells
worksheet.GetCells().Get(u"A1").PutValue(50);
worksheet.GetCells().Get(u"A2").PutValue(100);
worksheet.GetCells().Get(u"A3").PutValue(150);
worksheet.GetCells().Get(u"B1").PutValue(60);
worksheet.GetCells().Get(u"B2").PutValue(32);
worksheet.GetCells().Get(u"B3").PutValue(50);
// Adding a chart to the worksheet
int chartIndex = worksheet.GetCharts().Add(ChartType::Column, 5, 0, 15, 5);
// Accessing the instance of the newly added chart
Chart chart = worksheet.GetCharts().Get(chartIndex);
// Adding SeriesCollection (chart data source) to the chart ranging from "A1" cell to "B3"
chart.GetNSeries().Add(u"A1:B3", true);
// Setting the foreground color of the plot area
chart.GetPlotArea().GetArea().SetForegroundColor(Color::Blue());
// Setting the foreground color of the chart area
chart.GetChartArea().GetArea().SetForegroundColor(Color::Yellow());
// Setting the foreground color of the 1st SeriesCollection area
chart.GetNSeries().Get(0).GetArea().SetForegroundColor(Color::Red());
// Setting the foreground color of the area of the 1st SeriesCollection point
chart.GetNSeries().Get(0).GetPoints().Get(0).GetArea().SetForegroundColor(Color::Cyan());
// Filling the area of the 2nd SeriesCollection with a gradient
chart.GetNSeries().Get(1).GetArea().GetFillFormat().SetOneColorGradient(Color::Lime(), 1, GradientStyleType::Horizontal, 1);
// Setting the color of Category Axis' major gridlines to silver
chart.GetCategoryAxis().GetMajorGridLines().SetColor(Color::Silver());
// Setting the color of Value Axis' major gridlines to red
chart.GetValueAxis().GetMajorGridLines().SetColor(Color::Red());
// Saving the Excel file
workbook.Save(outDir + u"book1.out.xls");
std::cout << "Chart created and formatted successfully!" << std::endl;
Aspose::Cells::Cleanup();
}