Previous topicNext topic
Help > 开发指南 > Excel > API > 示例 > Chart图表 >
如何:创建股价图表

本主题演示如何使用连续和不连续的单元格区域作为数据源来创建股价图表。

使用连续源范围创建股票图表

根据股票图表类型,按与股票图表名称相同的顺序排列源范围内的列或行:

例如,要创建开盘价-最高价-最低价-收盘价图表,请按以下顺序组织包含股票数据的列:开盘价、最高价、最低价和收盘价(见下图)。

在源区域排列数据后,调用 ChartCollection.Add 方法并将指定区域作为参数传递以创建图表。有关如何在代码中创建图表并调整其设置的详细信息,请参阅如何:创建和修改图表示例。

Vb.Net
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("chartStock")
workbook.Worksheets.ActiveWorksheet = worksheet

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

'显示图表标题。
chart.Title.Visible = True
chart.Title.SetValue("NASDAQ:MSFT")

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

'通过值轴在主轴集合中的索引访问值轴。
Dim axis As DevExpress.Spreadsheet.Charts.Axis = chart.PrimaryAxes(1)
'在值轴上添加标题。
axis.Title.Visible = True
axis.Title.SetValue("Price in USD")

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

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

// 显示图表标题。
chart.Title.Visible = true;
chart.Title.SetValue("NASDAQ:MSFT");

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

// 通过值轴在主轴集合中的索引访问值轴。
DevExpress.Spreadsheet.Charts.Axis axis = chart.PrimaryAxes[1];
// 在值轴上添加标题。
axis.Title.Visible = true;
axis.Title.SetValue("Price in USD");

使用不连续的源范围创建股票图表

如果股票图表的数据位于不相邻的列中,则可以使用 SeriesCollection.Add 方法将单独的数据系列添加到图表中。序列的数量和顺序取决于股票图表类型:

最高价-最低价-收盘价图表

若要创建此图表,请按以下顺序向 SeriesCollection 集合添加三个系列:最高价、最低价和收盘价。

如果保存创建的图表并在 Microsoft Excel 中打开它,则该图表不会显示为标准的最高价-最低价-收盘价图表。相反,它为每个股票价格显示三条线,并显示连接最高价和最低价值的高低线。

若要使图表在 Microsoft Excel 中正确显示,请调整序列的外观,如下所述:

  1. 使用 Series.Outline.SetNoFill 方法 (ShapeOutlineFill.SetNoFill) 隐藏高、低和收盘数据序列的线条。
  2. 将 Series.Marker.Symbol (Marker.Symbol) 属性设置为 MarkerStyle.None 以隐藏高数据序列和低数据序列的标记。
  3. 使用 Series.Marker 选项可以更改关闭数据序列的数据标记的外观。在此示例中,标记样式 (Marker.Symbol) 设置为 MarkerStyle.Dash,标记颜色为黑色。

Vb.Net
'创建图表并指定其位置。
Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.StockHighLowClose)
chart.TopLeftCell = worksheet.Cells("K2")
chart.BottomRightCell = worksheet.Cells("Q16")

'添加一系列高值。
Dim highSeries As DevExpress.Spreadsheet.Charts.Series = chart.Series.Add(worksheet("F2"), worksheet("B3:B7"), worksheet("F3:F7"))
'隐藏序列行。          
highSeries.Outline.SetNoFill()
'隐藏系列标记。
highSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.None
'添加一系列低值。
Dim lowSeries As DevExpress.Spreadsheet.Charts.Series = chart.Series.Add(worksheet("G2"), worksheet("B3:B7"), worksheet("G3:G7"))
'隐藏序列行。              
lowSeries.Outline.SetNoFill()
'隐藏系列标记。
lowSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.None
'添加一系列闭合值。
Dim closeSeries As DevExpress.Spreadsheet.Charts.Series = chart.Series.Add(worksheet("D2"), worksheet("B3:B7"), worksheet("D3:D7"))
'隐藏序列行。
closeSeries.Outline.SetNoFill()
'更改序列的数据标记样式。
closeSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.Dash
'将数据标记颜色设置为黑色。
closeSeries.Marker.Outline.SetSolidFill(System.Drawing.Color.Black)

'显示图表标题。
chart.Title.Visible = True
chart.Title.SetValue("NASDAQ:MSFT")
'隐藏图例。
chart.Legend.Visible = False
'通过值轴在主轴集合中的索引访问值轴。
Dim axis As DevExpress.Spreadsheet.Charts.Axis = chart.PrimaryAxes(1)
'在值轴上添加标题。
axis.Title.Visible = True
axis.Title.SetValue("Price in USD")

C#
// 创建图表并指定其位置。
DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.StockHighLowClose);
chart.TopLeftCell = worksheet.Cells["K2"];
chart.BottomRightCell = worksheet.Cells["Q16"];

// 添加一系列高值。
DevExpress.Spreadsheet.Charts.Series highSeries = chart.Series.Add(worksheet["F2"], worksheet["B3:B7"], worksheet["F3:F7"]);
// 隐藏序列行。
highSeries.Outline.SetNoFill();
// 隐藏系列标记。
highSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.None;
// 添加一系列低值。
DevExpress.Spreadsheet.Charts.Series lowSeries = chart.Series.Add(worksheet["G2"], worksheet["B3:B7"], worksheet["G3:G7"]);
// 隐藏序列行。
lowSeries.Outline.SetNoFill();
// 隐藏系列标记。
lowSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.None;
// 添加一系列闭合值。
DevExpress.Spreadsheet.Charts.Series closeSeries = chart.Series.Add(worksheet["D2"], worksheet["B3:B7"], worksheet["D3:D7"]);
// 隐藏序列行。
closeSeries.Outline.SetNoFill();
// 更改序列的数据标记样式。
closeSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.Dash;
// 将数据标记颜色设置为黑色。
closeSeries.Marker.Outline.SetSolidFill(System.Drawing.Color.Black);

// 显示图表标题。
chart.Title.Visible = true;
chart.Title.SetValue("NASDAQ:MSFT");
// 隐藏图例。
chart.Legend.Visible = false;
// 通过值轴在主轴集合中的索引访问值轴。
DevExpress.Spreadsheet.Charts.Axis axis = chart.PrimaryAxes[1];
// 在值轴上添加标题。
axis.Title.Visible = true;
axis.Title.SetValue("Price in USD");

开盘价-最高价-最低价-收盘价图表

按以下顺序向 SeriesCollection 集合添加四个序列:开盘价、最高价、最低价和收盘价,以创建开盘价-最高价-最低价-收盘价图表。

Vb.Net
'创建图表并指定其位置。
Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.StockOpenHighLowClose)
chart.TopLeftCell = worksheet.Cells("K2")
chart.BottomRightCell = worksheet.Cells("Q16")

'添加一系列打开的值。
chart.Series.Add(worksheet("C2"), worksheet("B3:B7"), worksheet("C3:C7"))
'添加一系列高值。
chart.Series.Add(worksheet("F2"), worksheet("B3:B7"), worksheet("F3:F7"))
'添加一系列低值。
chart.Series.Add(worksheet("G2"), worksheet("B3:B7"), worksheet("G3:G7"))
'添加一系列闭合值。
chart.Series.Add(worksheet("D2"), worksheet("B3:B7"), worksheet("D3:D7"))

'显示图表标题。
chart.Title.Visible = True
chart.Title.SetValue("NASDAQ:MSFT")
'隐藏图例。
chart.Legend.Visible = False
'通过值轴在主轴集合中的索引访问值轴。
Dim axis As DevExpress.Spreadsheet.Charts.Axis = chart.PrimaryAxes(1)
'在值轴上添加标题。
axis.Title.Visible = True
axis.Title.SetValue("Price in USD")

C#
// 创建图表并指定其位置。
DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.StockOpenHighLowClose);
chart.TopLeftCell = worksheet.Cells["K2"];
chart.BottomRightCell = worksheet.Cells["Q16"];

// 添加一系列打开的值。
chart.Series.Add(worksheet["C2"], worksheet["B3:B7"], worksheet["C3:C7"]);
// 添加一系列高值。 
chart.Series.Add(worksheet["F2"], worksheet["B3:B7"], worksheet["F3:F7"]);
// 添加一系列低值。 
chart.Series.Add(worksheet["G2"], worksheet["B3:B7"], worksheet["G3:G7"]);
// 添加一系列闭合值。
chart.Series.Add(worksheet["D2"], worksheet["B3:B7"], worksheet["D3:D7"]);

// 显示图表标题。
chart.Title.Visible = true;
chart.Title.SetValue("NASDAQ:MSFT");
// 隐藏图例。
chart.Legend.Visible = false;
// 通过值轴在主轴集合中的索引访问值轴。
DevExpress.Spreadsheet.Charts.Axis axis = chart.PrimaryAxes[1];
// 在值轴上添加标题。
axis.Title.Visible = true;
axis.Title.SetValue("Price in USD");

成交量-最高价-最低价-收盘价图表

Volume-High-Low-Close 图表使用以下类型的两个 ChartView 对象:ChartType.ColumnClustered 类型用于显示交易量,ChartType.StockHighLowClose 类型用于显示股票价格。使用 ChartView.Series.Add 方法将数据系列添加到每个图表视图。ChartType.StockHighLowClose 视图需要三个数据系列,顺序如下:最高价、最低价和收盘价。

若要使图表在 Microsoft Excel 中正确显示,请调整最高价、最低价和收盘价系列的外观,如“最高价-最低价-收盘价”股票图表部分所述。

Vb.Net
'创建图表并指定其位置。
Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.StockVolumeHighLowClose)
chart.TopLeftCell = worksheet.Cells("K2")
chart.BottomRightCell = worksheet.Cells("Q16")

'添加一系列卷值。
chart.Views(0).Series.Add(worksheet("I2"), worksheet("B3:B7"), worksheet("I3:I7"))
'添加一系列高值。
Dim highSeries As DevExpress.Spreadsheet.Charts.Series = chart.Views(1).Series.Add(worksheet("F2"), worksheet("B3:B7"), worksheet("F3:F7"))
'隐藏序列行。
highSeries.Outline.SetNoFill()
'隐藏系列标记。
highSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.None
'添加一系列低值。
Dim lowSeries As DevExpress.Spreadsheet.Charts.Series = chart.Views(1).Series.Add(worksheet("G2"), worksheet("B3:B7"), worksheet("G3:G7"))
'隐藏序列行。
lowSeries.Outline.SetNoFill()
'隐藏系列标记。
lowSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.None
'添加一系列闭合值。
Dim closeSeries As DevExpress.Spreadsheet.Charts.Series = chart.Views(1).Series.Add(worksheet("D2"), worksheet("B3:B7"), worksheet("D3:D7"))
'隐藏序列行。
closeSeries.Outline.SetNoFill()
'更改序列的数据标记样式。
closeSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.Dash
'将数据标记颜色设置为黑色。
closeSeries.Marker.Outline.SetSolidFill(System.Drawing.Color.Black)

'显示图表标题。
chart.Title.Visible = True
chart.Title.SetValue("NASDAQ:MSFT")
'隐藏图例。
chart.Legend.Visible = False
'通过值轴在辅助轴集合中的索引访问值轴。
Dim axis As DevExpress.Spreadsheet.Charts.Axis = chart.SecondaryAxes(1)
'在值轴上添加标题。
axis.Title.Visible = True
axis.Title.SetValue("Price in USD")

C#
// 创建图表并指定其位置。
DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.StockVolumeHighLowClose);
chart.TopLeftCell = worksheet.Cells["K2"];
chart.BottomRightCell = worksheet.Cells["Q16"];

// 添加一系列卷值。
chart.Views(0).Series.Add(worksheet["I2"], worksheet["B3:B7"], worksheet["I3:I7"]);
// 添加一系列高值。
DevExpress.Spreadsheet.Charts.Series highSeries = chart.Views[1].Series.Add(worksheet["F2"], worksheet["B3:B7"], worksheet["F3:F7"]);
// 隐藏序列行。
highSeries.Outline.SetNoFill();
// 隐藏系列标记。
highSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.None;
// 添加一系列低值。
DevExpress.Spreadsheet.Charts.Series lowSeries = chart.Views[1].Series.Add(worksheet["G2"], worksheet["B3:B7"], worksheet["G3:G7"]);
// 隐藏序列行。
lowSeries.Outline.SetNoFill();
// 隐藏系列标记。
lowSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.None;
// 添加一系列闭合值。
DevExpress.Spreadsheet.Charts.Series closeSeries = chart.Views[1].Series.Add(worksheet["D2"], worksheet["B3:B7"], worksheet["D3:D7"]);
// 隐藏序列行。
closeSeries.Outline.SetNoFill();
// 更改序列的数据标记样式。
closeSeries.Marker.Symbol = DevExpress.Spreadsheet.Charts.MarkerStyle.Dash;
// 将数据标记颜色设置为黑色。
closeSeries.Marker.Outline.SetSolidFill(System.Drawing.Color.Black);

// 显示图表标题。
chart.Title.Visible = true;
chart.Title.SetValue("NASDAQ:MSFT");
// 隐藏图例。
chart.Legend.Visible = false;
// 通过值轴在辅助轴集合中的索引访问值轴。
DevExpress.Spreadsheet.Charts.Axis axis = chart.SecondaryAxes[1];
// 在值轴上添加标题。
axis.Title.Visible = true;
axis.Title.SetValue("Price in USD");

成交量-开盘价-最高价-最低价-收盘价图表

Volume-Open-High-Low-Close 图表使用以下类型的两个 ChartView 对象:ChartType.ColumnClustered 类型用于显示交易量,ChartType.StockOpenHighLowClose 类型用于显示股票价格。使用 ChartView.Series.Add 方法将数据系列添加到每个图表视图。ChartType.StockOpenHighLowClose 视图需要按以下顺序排列的四个数据系列:开盘价、最高价、最低价和收盘价。

Vb.Net
'创建图表并指定其位置。
Dim chart As DevExpress.Spreadsheet.Charts.Chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.StockVolumeOpenHighLowClose)
chart.TopLeftCell = worksheet.Cells("K2")
chart.BottomRightCell = worksheet.Cells("Q16")

'添加一系列卷值。
chart.Views(0).Series.Add(worksheet("I2"), worksheet("B3:B7"), worksheet("I3:I7"))
'添加一系列打开的值。
chart.Views(1).Series.Add(worksheet("C2"), worksheet("B3:B7"), worksheet("C3:C7"))
'添加一系列高值。
chart.Views(1).Series.Add(worksheet("F2"), worksheet("B3:B7"), worksheet("F3:F7"))
'添加一系列低值。
chart.Views(1).Series.Add(worksheet("G2"), worksheet("B3:B7"), worksheet("G3:G7"))
'添加一系列闭合值。
chart.Views(1).Series.Add(worksheet("D2"), worksheet("B3:B7"), worksheet("D3:D7"))

'显示图表标题。. 
chart.Title.Visible = True
chart.Title.SetValue("NASDAQ:MSFT")
'隐藏图例。
chart.Legend.Visible = False
'通过值轴在辅助轴集合中的索引访问值轴。
Dim axis As DevExpress.Spreadsheet.Charts.Axis = chart.SecondaryAxes(1)
'在值轴上添加标题。
axis.Title.Visible = True
axis.Title.SetValue("Price in USD")

C#
// 创建图表并指定其位置。
DevExpress.Spreadsheet.Charts.Chart chart = worksheet.Charts.Add(DevExpress.Spreadsheet.Charts.ChartType.StockVolumeOpenHighLowClose);
chart.TopLeftCell = worksheet.Cells["K2"];
chart.BottomRightCell = worksheet.Cells["Q16"];

// 添加一系列卷值。
chart.Views[0].Series.Add(worksheet["I2"], worksheet["B3:B7"], worksheet["I3:I7"]);
// 添加一系列打开的值。   
chart.Views[1].Series.Add(worksheet["C2"], worksheet["B3:B7"], worksheet["C3:C7"]);
// 添加一系列高值。     
chart.Views[1].Series.Add(worksheet["F2"], worksheet["B3:B7"], worksheet["F3:F7"]);
// 添加一系列低值。     
chart.Views[1].Series.Add(worksheet["G2"], worksheet["B3:B7"], worksheet["G3:G7"]);
// 添加一系列闭合值。    
chart.Views[1].Series.Add(worksheet["D2"], worksheet["B3:B7"], worksheet["D3:D7"]);

// 显示图表标题。.
chart.Title.Visible = true;
chart.Title.SetValue("NASDAQ:MSFT");
// 隐藏图例。
chart.Legend.Visible = false;
// 通过值轴在辅助轴集合中的索引访问值轴。
DevExpress.Spreadsheet.Charts.Axis axis = chart.SecondaryAxes[1];
// 在值轴上添加标题。
axis.Title.Visible = true;
axis.Title.SetValue("Price in USD");