Bar and pie charts use a single value to represent each data point (price, units in stock, or reorder level). XYPlot charts, by contrast, use two values to represent each data point. They are useful to depict relationships between two dimensions of the data, and are often used in statistical analysis of data.
For example, the following chart illustrates an XY-Plot depicting the relationship between product unit prices and sales.
This type of chart is often used to support statistical techniques that quantify the relationship between the variables (typically Linear Regression Analysis). For example, the preceding chart illustrates a point with unit price above $250 that is relatively distant from the others. In a linear regression, this point would be called an "outlier", and would have a much greater influence on the result of the analysis than the other points in the series.
XY-Plot charts are also useful on their own, to show qualitative aspects of relationships. For example, are sales related to unit prices? In this example, the data seems to suggest there is indeed a relationship. Perhaps the customers prefer to buy expensive products from NorthWind and cheaper products from their local supermarkets.
The following code is used to create the chart in the preceding graphic. It is very similar to the code used to create the bar chart, except it sets the X and Y values to data, instead of using a simple sequence for the X values.
' get chart data
Dim data As DataView = _dataSet.Tables("Sales").DefaultView
data.Sort = "UnitPrice"
' configure chart
C1Chart1.Reset()
C1Chart1.ChartGroups(0).ChartType = Chart2DTypeEnum.XYPlot
' create single series for product price vs sales
Dim dscoll As ChartDataSeriesCollection = _
C1Chart1.ChartGroups(0).ChartData.SeriesList;
dscoll.Clear();
Dim series As ChartDataSeries = 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
Dim i As Integer
For i = 0 To data.Count – 1
series.X(i) = data(i)("UnitPrice")
series.Y(i) = data(i)("ProductSales")
Next I
' attach product names to x-axis
Dim ax As Axis = C1Chart1.ChartArea.AxisX
ax.Text = "Unit Price (US$)"
ax.AnnoFormat = FormatEnum.NumericCurrency
ax.GridMajor.Visible = True
' configure y-axis
Dim ay As Axis = C1Chart1.ChartArea.AxisY
ay.Text = "Sales (thousand US$)"
ay.AnnoFormat = FormatEnum.NumericManual
ay.AnnoFormatString = "$#,##0,"
ay.GridMajor.Visible = True
· C#
// get chart data
DataView data = _dataSet.Tables["Sales"].DefaultView;
data.Sort = "UnitPrice";
// configure chart
C1Chart1.Reset();
C1Chart1.ChartGroups[0].ChartType = Chart2DTypeEnum.XYPlot;
// create single series for product price vs sales
ChartDataSeriesCollection
dscoll = C1Chart1.ChartGroups[0].ChartData.SeriesList;
dscoll.Clear();
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++)
{
series.X[i] = data[i]["UnitPrice"];
series.Y[i] = data[i]["ProductSales"];
}
// 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;
· Delphi
var
data: DataView;
dscoll: ChartDataSeriesCollection;
series: ChartDataSeries;
i : Integer;
ax, ay: Axis;
begin
// get chart data
data := _dataSet.Tables['Sales'].DefaultView;
data.Sort := 'UnitPrice';
// configure chart
C1Chart1.Reset();
C1Chart1.ChartGroups[0].ChartType := Chart2DTypeEnum.XYPlot;
// create single series for product price vs sales
dscoll := C1Chart1.ChartGroups[0].ChartData.SeriesList;
dscoll.Clear();
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 i := 0 to data.Count – 1 do
begin
series.X[i] := data[i]['UnitPrice'];
series.Y[i] := data[i]['ProductSales'];
end;
// attach product names to x-axis
ax := C1Chart1.ChartArea.AxisX;
ax.Text := 'Unit Price (US$)';
ax.AnnoFormat := FormatEnum.NumericCurrency;
ax.GridMajor.Visible := true;
// configure y-axis
ay := C1Chart1.ChartArea.AxisY;
ay.Text := 'Sales (thousand US$)';
ay.AnnoFormat := FormatEnum.NumericManual;
ay.AnnoFormatString := '$#,##0,';
ay.GridMajor.Visible := true;
end;
Send comments about this topic to ComponentOne. Copyright © ComponentOne LLC. All rights reserved. |