这些示例演示如何创建基本图表并指定其设置。
选择要执行的操作。
工作表中嵌入的所有图表都存储在图表集合中,可通过 Worksheet.Charts 属性访问。若要创建图表,请使用 ChartCollection.Add 方法将其添加到图表集合中,并传递以下参数:所需的图表类型 (ChartType) 和包含图表数据的 CellRange 对象(此参数是可选的,可以省略,因此可以手动将数据系列添加到图表中)。有关如何组织源范围内的数据以创建图表的信息,请参阅图表主题。
若要在工作表中定位创建的图表,请使用以下方法之一。
下面的示例演示如何使用 ChartCollection.Add 方法重载创建三维饼图,该重载允许您指定包含图表数据的 CellRange。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("chartTask1") workbook.Worksheets.ActiveWorksheet = worksheet '创建饼图并指定其位置。 Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.Pie3D, worksheet("B2:C7")) chart.TopLeftCell = worksheet.Cells("E2") chart.BottomRightCell = worksheet.Cells("K15") '设置图表样式。 chart.Style = DevExpress.Spreadsheet.Charts.ChartStyle.ColorGradient |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["chartTask1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 创建饼图并指定其位置。 DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.Pie3D, worksheet["B2:C7"]); chart.TopLeftCell = worksheet.Cells["E2"]; chart.BottomRightCell = worksheet.Cells["K15"]; // 设置图表样式。 chart.Style = DevExpress.Spreadsheet.Charts.ChartStyle.ColorGradient; |
如果未在 ChartCollection.Add 方法中指定包含图表数据的范围,则可以稍后使用下列方法之一来定义它。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("chartTask1") workbook.Worksheets.ActiveWorksheet = worksheet '创建图表并指定其位置。 Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered) chart.TopLeftCell = worksheet.Cells("H2") chart.BottomRightCell = worksheet.Cells("N14") '添加使用工作表区域作为数据源的图表系列。 chart.Series.Add(worksheet("D2"), worksheet("B3:B6"), worksheet("D3:D6")) chart.Series.Add(worksheet("F2"), worksheet("B3:B6"), worksheet("F3:F6")) |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["chartTask1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 创建图表并指定其位置。 DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered); chart.TopLeftCell = worksheet.Cells["H2"]; chart.BottomRightCell = worksheet.Cells["N14"]; // 添加使用工作表区域作为数据源的图表系列。 chart.Series.Add(worksheet["D2"], worksheet["B3:B6"], worksheet["D3:D6"]); chart.Series.Add(worksheet["F2"], worksheet["B3:B6"], worksheet["F3:F6"]); |
若要从图表中删除单个序列,请使用 SeriesCollection.Remove 或 SeriesCollection.RemoveAt 方法。
下面的示例演示了如何从图表中删除第二个序列。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("chartTask1") workbook.Worksheets.ActiveWorksheet = worksheet '创建图表并指定其位置。 Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered, worksheet("B2:E6")) chart.TopLeftCell = worksheet.Cells("H2") chart.BottomRightCell = worksheet.Cells("N14") '根据序号删除图表系。 chart.Series.RemoveAt(1) |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["chartTask1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 创建图表并指定其位置。 DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered, worksheet["B2:E6"]); chart.TopLeftCell = worksheet.Cells["H2"]; chart.BottomRightCell = worksheet.Cells["N14"]; // 根据序号删除图表系。 chart.Series.RemoveAt(1); |
创建图表后,可以更改从中检索序列参数和值数据的单元格区域。为此,请执行以下步骤。
下面的示例演示了如何向图表添加数据序列,以及如何更改包含特定序列数据的单元格区域。
该代码使用 SeriesCollection.Add 方法创建一个系列,并将其添加到 ChartObject.Series 集合中。若要指定工作表区域中包含的序列值,请使用 ChartData.FromRange 方法创建一个 ChartData 对象,并将其分配给 Series.Values 属性。
ChartText.SetReference 方法用于将 Series.SeriesName 链接到工作表单元格的内容。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("chartTask1") workbook.Worksheets.ActiveWorksheet = worksheet '创建图表并指定其位置。 Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered) chart.TopLeftCell = worksheet.Cells("H2") chart.BottomRightCell = worksheet.Cells("N14") '使用工作表区域作为数据源添加系列。 chart.Series.Add(worksheet("D2"), worksheet("B3:B6"), worksheet("D3:D6")) chart.Series.Add(worksheet("F2"), worksheet("B3:B6"), worksheet("F3:F6")) '更改序列值的数据范围。 chart.Series(1).Values = DevExpress.Spreadsheet.Charts.ChartData.FromRange(worksheet("E3:E6")) '指定作为序列名称来源的单元格。 chart.Series(1).SeriesName.SetReference(worksheet("E2")) |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["chartTask1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 创建图表并指定其位置。 DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered); chart.TopLeftCell = worksheet.Cells["H2"]; chart.BottomRightCell = worksheet.Cells["N14"]; // 使用工作表区域作为数据源添加系列。 chart.Series.Add(worksheet["D2"], worksheet["B3:B6"], worksheet["D3:D6"]); chart.Series.Add(worksheet["F2"], worksheet["B3:B6"], worksheet["F3:F6"]); // 更改序列值的数据范围。 chart.Series[1].Values = DevExpress.Spreadsheet.Charts.ChartData.FromRange(worksheet["E3:E6"]); // 指定作为序列名称来源的单元格。 chart.Series[1].SeriesName.SetReference(worksheet["E2"]); |
默认情况下,如果图表具有多个数据系列,则这些数据系列将按照它们在工作表上的显示顺序绘制在图表上(如果数据按列排列,则从左到右;如果数据按行排列,则从上到下)。但是,您可以更改此默认顺序。利用 Series.BringForward 或 Series.SendBackward 方法按绘图顺序向上或向下移动指定的序列,一次一个位置。若要将序列放在图表上所有其他序列之前或之后,请使用 Series.BringToFront 或 Series.SendToBack 方法。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("chartTask1") workbook.Worksheets.ActiveWorksheet = worksheet '创建图表并指定其位置。 Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered, worksheet("B2:D6")) chart.TopLeftCell = worksheet.Cells("H2") chart.BottomRightCell = worksheet.Cells("N14") '改变图表系列的顺序 chart.Series(1).BringForward() |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["chartTask1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 创建图表并指定其位置。 DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered, worksheet["B2:D6"]); chart.TopLeftCell = worksheet.Cells["H2"]; chart.BottomRightCell = worksheet.Cells["N14"]; // 改变图表系列的顺序 chart.Series[1].BringForward(); |
创建图表后,您可能会发现所选的图表不合适,其他图表类型可能更能代表您的数据。在这种情况下,无需重新创建图表。只需使用 ChartObject.ChangeType 方法更改整个图表的类型即可。此方法将现有图表替换为指定的图表。如果无法完成操作,则会触发异常。
下面的示例演示如何创建 ChartType.PieExploded 类型的图表。之后,代码尝试使用 ChartObject.ChangeType 方法将图表类型更改为 ChartType.LineMarker。如果尝试将图表类型更改为 ChartType.StockHighLowClose(此行已注释),则会引发异常,因为此图表类型的数据范围不足,并且图表将更改为 ChartType.ColumnClustered。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("chartTask1") workbook.Worksheets.ActiveWorksheet = worksheet Dim type1 As DevExpress.Spreadsheet.Charts.ChartType = DevExpress.Spreadsheet.Charts.ChartType.LineMarker '如果无法使用现有数据创建新的图表类型,则会引发异常。 Dim type2 As DevExpress.Spreadsheet.Charts.ChartType = DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered '创建图表并指定其位置 Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.PieExploded, worksheet("B2:C7")) '改变图表的类型 Try chart.ChangeType(type1) Catch e As Exception MessageBox.Show(e.Message, "Incompatible chart type") chart.ChangeType(type2) End Try |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["chartTask1"]; workbook.Worksheets.ActiveWorksheet = worksheet; DevExpress.Spreadsheet.Charts.ChartType type1 = DevExpress.Spreadsheet.Charts.ChartType.LineMarker; // 如果无法使用现有数据创建新的图表类型,则会引发异常。 DevExpress.Spreadsheet.Charts.ChartType type2 = DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered; // 创建图表并指定其位置 DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.PieExploded, worksheet["B2:C7"]); // 改变图表的类型 try { chart.ChangeType(type1); } catch (Exception e) { MessageBox.Show(e.Message, "Incompatible chart type"); chart.ChangeType(type2); } |
除了更改整个图表的类型外,还可以为单个数据系列选择不同的图表类型。这将自动将图表转换为组合图表。组合图表是一种复杂的图表,它由两个或多个 ChartView 对象组成,这些对象合并了相同图表类型的系列。若要更改单个数据序列的类型,请调用 Series.ChangeType 方法。如果指定的序列类型与现有 ChartView 对象 (ChartView.ViewType) 的类型不同,则将创建包含序列的新 ChartView,否则,该系列将添加到相同类型的现有 ChartView 中。
重要
并非所有图表类型都可以组合(例如,无法组合 2-D 和 3-D 图表类型)。如果选择的类型在逻辑上与现有图表类型无关,则生成的图表将仅包含最近添加类型的一个图表视图。
下面列出了兼容的图表类型。
ChartType.Area
ChartType.AreaFullStacked
ChartType.AreaStacked
ChartType.BarClustered
ChartType.BarFullStacked
ChartType.BarStacked
ChartType.ColumnClustered
ChartType.ColumnFullStacked
ChartType.ColumnStacked
ChartType.Line
ChartType.LineFullStacked
ChartType.LineFullStackedMarker
ChartType.LineMarker
ChartType.LineStacked
ChartType.LineStackedMarker
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("chartTask1") workbook.Worksheets.ActiveWorksheet = worksheet '创建图表并指定其位置。 Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.LineMarker, worksheet("B2:D8")) chart.TopLeftCell = worksheet.Cells("F2") chart.BottomRightCell = worksheet.Cells("L15") '更改第二个系列的类型。 chart.Series(1).ChangeType(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered) '使用辅助轴。 chart.Series(1).AxisGroup = DevExpress.Spreadsheet.Charts.AxisGroup.Secondary '指定图例的位置。 chart.Legend.Position = DevExpress.Spreadsheet.Charts.LegendPosition.Top |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["chartTask1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 创建图表并指定其位置。 DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.LineMarker, worksheet["B2:D8"]); chart.TopLeftCell = worksheet.Cells["F2"]; chart.BottomRightCell = worksheet.Cells["L15"]; // 更改第二个系列的类型。 chart.Series[1].ChangeType(DevExpress.Spreadsheet.Charts.ChartType.ColumnClustered); // 使用辅助轴。 chart.Series[1].AxisGroup = DevExpress.Spreadsheet.Charts.AxisGroup.Secondary; // 指定图例的位置。 chart.Legend.Position = DevExpress.Spreadsheet.Charts.LegendPosition.Top; |