本章节介绍一些基本图表类型的一般用法,这些类型包括 Bar, Pie, 和 X-Y Plot.同时也为每一种图表类型提供了示例代码.示例都是简洁和明了的,同时重点关注的是每一种图表类型的主
要方面.本章节中大多数示例程序使用的图表数据都在 Nwind.mdb文件中,该文件在Winforms图表安装过程中被创建.另外在发布包中含有其它很多复杂的示例,这些示例程序包含了在快速入门中没有介绍的高级用法.
使用图表来展示一系列简单数值的场景是很常见的,例如展示产品价格.这种类型的图表是非常有用的.因为它以一个快速高效的方式展示了各个值之间的相对量.
这种类型图表的主要特征是每一个数据点仅表达了一个价格的信息.当创建这些图表时,将要被展示的值被赋给序列的每一个 Y值上.Y 值仅提供了点之间的固定间隔,并且经常显示在每一个数据点附加的标签上.
展示这种信息时推荐使用的图表类型是条形图和饼状图这两种图表类型.
下图展示了一个简单的显示产品价格的条形图表(NorthWind 产品列表中的饮料产品)
请注意条状图是水平显示的,这是为了给显示在轴线上的产品名字留够展示的空间.这个效果通过使用 Inverted 属性完成.
下面的代码创建了上述的条形图.使用的数据的来源是 NorthWind 产品列表中的 Beverages 表中的内容,可以在 C:\Program Files\ComponentOne\Studio for Winforms\Common 文件夹中找到它.在实际的应用程序中,代码可能比示例中的更加简洁,因为一些属性可以在设计时设置.
' get chart data |
C#
// get chart data
data.RowFilter = "CategoryID = 1"; // beverages // configure the chart c1Chart1.Reset(); c1Chart1.ChartArea.Inverted = true;
// create single series for product price
ChartDataSeries series = dscoll.AddNewSeries(); series.Label = "Product Prices"; // populate the series series.PointData.Length = data.Count; for (int i = 0; i < data.Count; i++) {
} // attach product names to x-axis Axis ax = c1Chart1.ChartArea.AxisX; ax.AnnoMethod = AnnotationMethodEnum.ValueLabels; for (int i = 0; i < data.Count; i++)
// configure y-axis Axis ay = c1Chart1.ChartArea.AxisY; ay.AnnoFormat = FormatEnum.NumericCurrency; |
在一个图表中展示多于一个的数据序列的场景是很常见的,使用 C1Chart 可以很容易地做到这一点.而且代码可能很类似于上述的代码,除了您可能需要在 ChartDataSeriesCollection 中添加一个附件的列表之外.
Visual Basic
' label Y-axis and show legend |
C#
// label Y-axis and show legend
series = dscoll.AddNewSeries(); series.Label = "Units In Stock"; series.SymbolStyle.Color = Color.Green; series.LineStyle.Pattern = LinePatternEnum.None; series.PointData.Length = data.Count; for (int i = 0; i < data.Count; i++) {
} // reorder level series = dscoll.AddNewSeries(); series.Label = "Reorder Level"; series.SymbolStyle.Color = Color.Red; series.LineStyle.Pattern = LinePatternEnum.None; series.PointData.Length = data.Count; for (int i = 0; i < data.Count; i++) {
} // show gridlines for secondary Y-axis _c1c.ChartArea.AxisY2.GridMajor.Visible = true; |
Visual Basic
' get chart data
data.RowFilter = "CategoryID = 1" ' beverages ' configure chart C1Chart1.Reset() C1Chart1.BackColor = Color.White C1Chart1.ChartArea.Style.Font = new Font("Tahoma", 8) C1Chart1.ChartGroups(0).ChartType = Chart2DTypeEnum.Pie ' get series collection (pies have one series per slice) Dim dscoll As ChartDataSeriesCollection = C1Chart1.ChartGroups(0).ChartData.SeriesList dscoll.Clear() ' populate the series Dim i As Integer For i = 0 To data.Count – 1 Dim series As ChartDataSeries = dscoll.AddNewSeries() series.PointData.Length = 1 series.Y(0) = data("UnitPrice") series.Label = String.Format("{0} ({1:c})", _ data("ProductName"), data("UnitPrice")) Next I ' show pie legend C1Chart1.Legend.Visible = True C1Chart1.Legend.Text = "Product Unit Prices" |
C#
// get chart data
data.RowFilter = "CategoryID = 1"; // beverages // configure chart c1Chart1.Reset(); c1Chart1.BackColor = Color.White;
// get series collection (pies have one series per slice)
for (int i = 0; i < data.Count; i++) {
} // show pie legend c1Chart1.Legend.Visible = true; c1Chart1.Legend.Text = "Product Unit Prices"; |
Visual Basic
' hide legend, configure labels |
C#
// hide legend, configure labels c1Chart1.Legend.Visible = false;
lbl.AttachMethod = AttachMethodEnum.DataIndex; AttachMethodData am = lbl.AttachMethodData; am.GroupIndex = 0; am.SeriesIndex = i; am.PointIndex = 0; } |
Visual Basic
' get chart data |
C#
// get chart data
// create single series for product price vs sales ChartDataSeriesCollection
ChartDataSeries series = dscoll.AddNewSeries(); // show symbols only (no lines) series.SymbolStyle.Color = Color.Green; series.SymbolStyle.OutlineColor = Color.Black; series.LineStyle.Pattern = LinePatternEnum.None; // populate the series series.PointData.Length = data.Count; for (int i = 0; i < data.Count; i++) {
} // attach product names to x-axis Axis ax = c1Chart1.ChartArea.AxisX; ax.Text = "Unit Price (US$)"; ax.AnnoFormat = FormatEnum.NumericCurrency; ax.GridMajor.Visible = true; // configure y-axis Axis ay = c1Chart1.ChartArea.AxisY; ay.Text = "Sales (thousand US$)"; ay.AnnoFormat = FormatEnum.NumericManual; ay.AnnoFormatString = "$#,##0,"; ay.GridMajor.Visible = true; |