Previous topicNext topic
Help > 开发指南 > Excel > API > 示例 > Chart图表 >
如何:设置图表元素的格式

此示例演示如何增强现有图表的外观。有关如何在代码中创建基本图表的示例,请参阅如何:创建和修改图表一文。

选择要执行的操作。

应用内置图表样式

图表样式允许您快速更改图表外观。图表样式更改图表的背景填充,指定数据系列的颜色,并对图表应用不同的形状效果和轮廓。若要将预定义样式之一应用于图表,请使用 ChartObject.Style 属性。

下面的示例演示如何使用 ChartObject.Style 属性创建图表并对其应用预定义样式之一。

Vb.Net
'创建图表并指定其位置。
Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered, worksheet("B2:D4"))
chart.TopLeftCell = worksheet.Cells("H2")
chart.BottomRightCell = worksheet.Cells("N14")

'设置图表样式。
chart.Style = DevExpress.Spreadsheet.Charts.ChartStyle.Accent1Dark

C#
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["chartStock"];
workbook.Worksheets.ActiveWorksheet = worksheet;

// 创建图表并指定其位置。
DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered, worksheet["B2:D4"]);
chart.TopLeftCell = worksheet.Cells["H2"];
chart.BottomRightCell = worksheet.Cells["N14"];

// 设置图表样式。
chart.Style = DevExpress.Spreadsheet.Charts.ChartStyle.Accent1Dark;

设置单个图表元素的格式

图表样式允许您应用一组预定义的格式选项。但是,您可以微调这些设置,并通过为单个图表元素指定不同的颜色或轮廓来指定自定义格式。ShapeFormatBase 对象提供了一组可用于图表的格式特征。表示图表元素的所有对象(Chart、PlotArea、Series、Axis、DataLabel、Legend、ChartTitle 等)都继承 ShapeFormatBase 接口,因此可以使用其格式属性来设置所需图表元素的颜色和边框。

填充图表元素

若要填充图表元素,请使用 ShapeFormatBase.Fill 属性。此属性返回包含形状填充特征的 ShapeFill 对象。可以使用 ShapeOutlineFill.SetSolidFill 方法用纯色填充图表元素,使用 ShapeOutlineFill.SetNoFill 方法使元素透明,通过调用 ShapeOutlineFill.SetGradientFill 方法应用渐变效果,或者使用 ShapeFill.SetPatternFill 或 ShapeFill.SetPictureFill 方法指定图案或图片填充。

指定图表元素的轮廓

若要设置图表元素的边框,请使用 ShapeFormatBase.Outline 属性。此属性提供对 ShapeOutline 对象的访问,该对象包含用于在图表上绘制边框或线条的选项。使用 ShapeOutlineFill.SetSolidFill 方法指定边框或线条颜色。若要删除轮廓,请调用 ShapeOutlineFill.SetNoFill 方法。您还可以指定线宽 (ShapeOutline.Width)、调整线尾的外观 (ShapeOutline.CapType)、设置图表线的虚线样式 (ShapeOutline.Dashing)、指定图表元素的联接类型 (ShapeOutline.JoinType) 和复合样式 (ShapeOutline.CompoundType)。

设置图表元素文本的格式

若要一次更改所有图表元素的字体属性,请使用 ChartObject.Font 属性。若要设置特定图表元素中包含的文本的格式,请使用该元素的 ShapeTextFormat.Font 属性。这些属性获取 ShapeTextFont 对象,该对象包含一组属性,可用于更改图表和轴标题、刻度线标签和数据标签的字体特征。若要更改图例条目的字体属性,请使用 Legend.Font 属性。

[>[!note] > SpreadsheetControl 不会为属性指定的每个图例条目显示单独的字体。该属性指定的字体将应用于所有条目。但是,可以在代码中检索该属性,以支持的格式导出该属性,并在 Microsoft Excel 中可视化该属性。 如果未指定该属性,但一个或多个图例条目指定了该属性,则从集合中的第一个条目中检索字体。LegendEntry.FontLegend.FontLegendEntry.FontLegend.FontFont

下面的示例演示了如何创建簇状柱形图并调整其外观。首先,添加图表标题并通过 ShapeTextFont.Color 属性更改字体颜色。使用 ShapeOutlineFill.SetNoFill 方法使绘图区域透明,然后利用 ShapeOutlineFill.SetGradientFill 方法将渐变填充应用于图表区域。若要为图表中的所有列设置图片填充,请调用系列对象的 ShapeFill.SetPictureFill 方法。最后,利用 ShapeOutlineFill.SetSolidFill 方法更改主轴的颜色,并通过 ShapeOutline.Width 属性指定轴宽度。

Vb.Net
'创建图表并指定其位置。
Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered, worksheet("B2:C8"))
chart.TopLeftCell = worksheet.Cells("F2")
chart.BottomRightCell = worksheet.Cells("N17")

'添加图表标题并设置其格式。
chart.Title.SetValue("Countries with the largest forest area")
chart.Title.Font.Color = Color.FromArgb(&H34, &H5E, &H25)

'不为绘图区域设置填充。
chart.PlotArea.Fill.SetNoFill()

'将渐变填充应用于图表区域。
chart.Fill.SetGradientFill(DevExpress.Spreadsheet.Drawings.ShapeGradientType.Linear, Color.FromArgb(&HFD, &HEA, &HDA), Color.FromArgb(&H77, &H93, &H3C))
Dim gradientFill As DevExpress.Spreadsheet.Drawings.ShapeGradientFill = chart.Fill.GradientFill
gradientFill.Stops.Add(0.78F, Color.FromArgb(&HB7, &HDE, &HE8))
gradientFill.Angle = 90

'设置数据系列的图片填充。
chart.Series(0).Fill.SetPictureFill("D:\PictureFill.png")

'自定义轴外观。
Dim axisCollection As DevExpress.Spreadsheet.Charts.AxisCollection = chart.PrimaryAxes
For Each axis As DevExpress.Spreadsheet.Charts.Axis In axisCollection
    axis.MajorTickMarks = DevExpress.Spreadsheet.Charts.AxisTickMarks.None
    axis.Outline.SetSolidFill(Color.FromArgb(&H34, &H5E, &H25))
    axis.Outline.Width = 1.25
Next axis
'更改值轴的比例。
Dim valueAxis As DevExpress.Spreadsheet.Charts.Axis = axisCollection(1)
valueAxis.Scaling.AutoMax = False
valueAxis.Scaling.Max = 8000000
valueAxis.Scaling.AutoMin = False
valueAxis.Scaling.Min = 0
'指定值轴的显示单位。
valueAxis.DisplayUnits.UnitType = DevExpress.Spreadsheet.Charts.DisplayUnitType.Thousands
valueAxis.DisplayUnits.ShowLabel = True

'隐藏图例。
chart.Legend.Visible = False

C#
// 创建图表并指定其位置。
DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered, worksheet["B2:C8"]);
chart.TopLeftCell = worksheet.Cells["F2"];
chart.BottomRightCell = worksheet.Cells["N17"];

// 添加图表标题并设置其格式。
chart.Title.SetValue("Countries with the largest forest area");
chart.Title.Font.Color = Color.FromArgb(0x34, 0x5E, 0x25);

// 不为绘图区域设置填充。
chart.PlotArea.Fill.SetNoFill();

// 将渐变填充应用于图表区域。
chart.Fill.SetGradientFill(DevExpress.Spreadsheet.Drawings.ShapeGradientType.Linear, Color.FromArgb(0xFD, 0xEA, 0xDA), Color.FromArgb(0x77, 0x93, 0x3));
DevExpress.Spreadsheet.Drawings.ShapeGradientFill gradientFill = chart.Fill.GradientFill;
gradientFill.Stops.Add(0.78F, Color.FromArgb(0xB7, 0xDE, 0xE8));
gradientFill.Angle = 90;

// 设置数据系列的图片填充。
chart.Series(0).Fill.SetPictureFill(@"D:\PictureFill.png");

// 自定义轴外观。
DevExpress.Spreadsheet.Charts.AxisCollection axisCollection = chart.PrimaryAxes;
foreach (DevExpress.Spreadsheet.Charts.Axis axis in axisCollection)
{
    axis.MajorTickMarks = DevExpress.Spreadsheet.Charts.AxisTickMarks.None;
    axis.Outline.SetSolidFill(Color.FromArgb(0x34, 0x5E, 0x25));
    axis.Outline.Width = 1.25;
}
// 更改值轴的比例。
DevExpress.Spreadsheet.Charts.Axis valueAxis = axisCollection[1];
valueAxis.Scaling.AutoMax = false;
valueAxis.Scaling.Max = 8000000;
valueAxis.Scaling.AutoMin = false;
valueAxis.Scaling.Min = 0;
// 指定值轴的显示单位。
valueAxis.DisplayUnits.UnitType = DevExpress.Spreadsheet.Charts.DisplayUnitType.Thousands;
valueAxis.DisplayUnits.ShowLabel = true;

// 隐藏图例。
chart.Legend.Visible = false;

指定图表视图选项

对于影响图表外观的不同图表类型,存在特定设置。使用 ChartView 和 View3DOptions 对象的属性指定二维和三维图表的图表选项。

下面的示例演示了如何创建三维簇状柱形图并调整其外观。具体而言,该代码指定如何使用 View3DOptions.BackWall、View3DOptions.SideWall 和 View3DOptions.Floor 属性自定义图表墙和地板。

Vb.Net
'创建图表并指定其位置。
Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.Column3DClustered, worksheet("B2:C8"))
chart.TopLeftCell = worksheet.Cells("F2")
chart.BottomRightCell = worksheet.Cells("L15")

'指定序列中的每个数据点具有不同的颜色。
chart.Views(0).VaryColors = True
'指定系列大纲。
chart.Series(0).Outline.SetSolidFill(Color.AntiqueWhite)
'隐藏图例。
chart.Legend.Visible = False

'指定侧墙颜色。
chart.View3D.SideWall.Fill.SetSolidFill(Color.FromArgb(&HDC, &HFA, &HDD))
'指定后墙的填充图案。
chart.View3D.BackWall.Fill.SetPatternFill(Color.FromArgb(&H9C, &HFB, &H9F), Color.WhiteSmoke, DevExpress.Spreadsheet.Drawings.ShapeFillPatternType.DiagonalBrick)

Dim floorOptions As DevExpress.Spreadsheet.Charts.SurfaceOptions = chart.View3D.Floor
'指定地板颜色。
floorOptions.Fill.SetSolidFill(Color.FromArgb(&HFA, &HDC, &HF9))
'指定地板边框。
floorOptions.Outline.SetSolidFill(Color.FromArgb(&HB4, &H95, &HDE))
floorOptions.Outline.Width = 1.25

C#
// 创建图表并指定其位置。
DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.Column3DClustered, worksheet["B2:C8"]);
chart.TopLeftCell = worksheet.Cells["F2"];
chart.BottomRightCell = worksheet.Cells["L15"];

// 指定序列中的每个数据点具有不同的颜色。
chart.Views[0].VaryColors = true;
// 指定系列大纲。
chart.Series[0].Outline.SetSolidFill(Color.AntiqueWhite);
// 隐藏图例。
chart.Legend.Visible = false;

// 指定侧墙颜色。
chart.View3D.SideWall.Fill.SetSolidFill(Color.FromArgb(0xD, 0xFA, 0xDD));
// 指定后墙的填充图案。
chart.View3D.BackWall.Fill.SetPatternFill(Color.FromArgb(0x9, 0xFB, 0x9F), Color.WhiteSmoke, DevExpress.Spreadsheet.Drawings.ShapeFillPatternType.DiagonalBrick);

DevExpress.Spreadsheet.Charts.SurfaceOptions floorOptions = chart.View3D.Floor;
// 指定地板颜色。
floorOptions.Fill.SetSolidFill(Color.FromArgb(0xFA, 0xD, 0xF9));
// 指定地板边框。
floorOptions.Outline.SetSolidFill(Color.FromArgb(0xB4, 0x95, 0xDE));
floorOptions.Outline.Width = 1.25;