ComponentOne Chart for .NET (2.0) Search HelpCentral 

Bar Charts with Two Y Axes

Although not as common, it is possible to use a single chart to show series that are measured using different scales and units. For example, you could show product prices and inventory levels on a single chart. To do this, you need to use a second Y-axis. The primary axis would show prices (in currency units) and the secondary axis would show counts.

To plot data against the secondary Y-axis, add new series to the second chart group (remember every C1Chart has two chart groups). You can use a different data type for the second chart group in order to make the chart clearer.

For example, the following chart contains three series. The first shows product unit prices (as bars, plotted against the primary Y-axis), and the others show the number of units in stock and the reorder level (as symbols, plotted against the secondary Y-axis).

 

The code used to create this second chart starts with the exact same steps used to create the previous chart. The two additional series, Units in Stock and Reorder Level, are created using the following code.

·      Visual Basic

' label Y-axis and show legend

C1Chart1.Legend.Visible = True

C1Chart1.ChartArea.AxisY.Text  = "Prices (in US$)"

C1Chart1.ChartArea.AxisY2.Text = "Unit Count"

 

' create two series for units in stock and reorder level

' (these are plotted against the secondary Y axis)

dscoll = C1Chart1.ChartGroups(1).ChartData.SeriesList

dscoll.Clear()

 

' units in stock

series = dscoll.AddNewSeries()

series.Label = "Units In Stock"

series.SymbolStyle.Color = Color.Green

series.LineStyle.Pattern = LinePatternEnum.None

series.PointData.Length = data.Count

For i = 0 To data.Count – 1

series.X(i) = I

series.Y(i) = data(i)("UnitsInStock")

Next 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 i = 0 To data.Count – 1

series.X(i) = I

series.Y(i) = data(i)("ReorderLevel")

Next I

 

' show gridlines for secondary Y-axis

C1Chart1.ChartArea.AxisY2.GridMajor.Visible = True

·      C#

// label Y-axis and show legend

_c1c.Legend.Visible = true;

_c1c.ChartArea.AxisY.Text  = "Prices (in US$)";

_c1c.ChartArea.AxisY2.Text = "Unit Count";

 

// create two series for units in stock and reorder level

// (these are plotted against the secondary Y axis)

dscoll = _c1c.ChartGroups[1].ChartData.SeriesList;

dscoll.Clear();

 

// units in stock

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++)

{

series.X[i] = i;

series.Y[i] = data[i]["UnitsInStock"];

}

 

// 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++)

{

series.X[i] = i;

series.Y[i] = data[i]["ReorderLevel"];

}

 

// show gridlines for secondary Y-axis

_c1c.ChartArea.AxisY2.GridMajor.Visible = true;

·      Delphi

begin

  // label Y-axis and show legend

  C1Chart1.Legend.Visible := true;

  C1Chart1.ChartArea.AxisY.Text  := 'Prices (in US$)';

  C1Chart1.ChartArea.AxisY2.Text := 'Unit Count';

 

  // create two series for units in stock and reorder level

  // (these are plotted against the secondary Y axis)

  dscoll := C1Chart1.ChartGroups[1].ChartData.SeriesList;

  dscoll.Clear();

 

  // units in stock

  series := dscoll.AddNewSeries();

  series.Label := 'Units In Stock';

  series.SymbolStyle.Color = Color.Green;

  series.LineStyle.Pattern = LinePatternEnum.None;

  series.PointData.Length = data.Count;

  for i := 0 to data.Count – 1 do

  begin

series.X[i] := i;

series.Y[i] := data[i]['UnitsInStock'];

  end;

 

  // 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 i := 0 to data.Count – 1 do

  begin

series.X[i] := i;

series.Y[i] := data[i]['ReorderLevel'];

  end;

 

  // show gridlines for secondary Y-axis

  C1Chart1.ChartArea.AxisY2.GridMajor.Visible := true;

end;


Send comments about this topic to ComponentOne.
Copyright © ComponentOne LLC. All rights reserved.